給你\(n\),求
\[\prod_^n^
\]對\(^+39\)取模。
\(\sigma_0(i)\)表示約數個數。
把式子拆成兩部分:
\[\prod_^n^=\prod_^n^\prod_^n^
\]先看前面這部分
\[\begin
s(n)&=\sum_^ni=\frac\\
\prod_^n\sigma_0(i)^i&=\prod_\prod_^)-p^s(\frac})}\\
&=\prod_\prod_^)-p^s(\frac})}\times \prod_2^)}
\end
\]前面那個式子可以直接計算,後面那個式子可以用min_25篩篩出質數和,然後套上乙個數論分塊解決。
再看後面那部分:
因為\(i\)的每個質數只出現了一次,所以\(\sigma_0(i)=2^}\)
\[\begin
\prod_^n\sigma_0(i)^&=\prod_^n2^\times \mu(i)}
\end
\]然後設
\[\begin
f1_&=\sum_^n[i\texti\textp_j]\mu(i)\times i\text\\
f2_&=\sum_^n[i\texti\textp_j]\mu(i)\\
f1_&=-([p_j,n]\text)-\sum_(f1_,i+1}+f2_,i+1})\\
f2_&=-([p_j,n]\text)-\sum_f2_,i+1}\\
\end
\]直接上min_25篩就好了。
乘法取模可以用黑科技,或者__int128
時間複雜度:\(o(\frac})\)
#include#include#include#include#include#include#include#includeusing namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pairpii;
typedef pairpll;
void sort(int &a,int &b)
void open(const char *s)
int rd()
do while((c=getchar())>='0'&&c<='9');
return b?-s:s;
}void put(int x)
static int c[20];
int t=0;
while(x)
while(t)
putchar(c[t--]+'0');
}int upmin(int &a,int b)
return 0;
}const ll p=1000000000039;
const ll p1=1000000000038;
ll mul(ll a,ll b)
ll mul1(ll a,ll b)
ll fp(ll a,ll b)
ll fp1(ll a,ll b)
const int m=350010;
const int m=350000;
ll n;
ll sq;
int b[m],pri[m],cnt;
ll f1[m],f2[m],g1[m],g2[m];
void init()
} pri[cnt+1]=m+1;
}ll s[50];
void gao()
for(int i=1;n/i>m;i++)
for(int i=1;i<=cnt;i++)
for(;n/j>m&&n/j>=(ll)pri[i]*pri[i];j++)
for(j=m;j>=(ll)pri[i]*pri[i];j--)
}}pll getf(ll x,int y)
for(int i=1;i<=cnt&&(ll)pri[i]*pri[i]<=n;i++)
ll ans=1;
for(int i=2;i<=50;i++)
ans=(ans+p)%p;
printf("%lld\n",ans);
}int main()
51NOD1965 奇怪的式子
傳送門 拆開變成 prod sigma 0 i prod sigma 0 i 考慮 prod sigma 0 i 運用 mu 的性質,設 c i 表示 i 的質數因子個數 那麼就是 prod 2 2 mu i c i 只需要設 f x,j 表示 1 到 x 最小質因子大於等於第 j 個質數的合數的 ...
51nod1149 Pi的遞推式
f x 1 0 x 4 f n f n 1 f n pi 4 x pi 3.1415926535 現在給出乙個n,求f n 由於結果巨大,只輸出mod 10 9 7的結果即可。n 1000000 乙個很好的思路。這樣的遞推過程可以看成乙個dag,求編號為n的點到編號為的點到的路徑總數。首先對最後一步...
51nod 1149 Pi的遞推式
f x 當0 x 4時等於1,x 4時等於f x 1 f x pi 求f n n 4就輸出一,接下來只討論n 4的情況 根據觀察遞推式,我們可以轉化問題 給你乙個n,每次可以減一或減pi,直至減到小於4,求方案數。減看起來不直觀,改為加 從乙個0開始,每次加1或加pi,直至加到與n相差在4以內,求方...