51NOD1965 奇怪的式子 min 25篩

2022-03-25 17:28:15 字數 2173 閱讀 9973

給你\(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以內,求方...