日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

51nod1244 欧拉函数之和 杜教筛

發布時間:2023/12/2 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 51nod1244 欧拉函数之和 杜教筛 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

和上一題差不多,一個是μ*I=e,一個是φ*I=Id

稍改就得到了這題的代碼

(我會告訴你我一開始逆元算錯了嗎)

1 #include <bits/stdc++.h> 2 #define MAX 5000000 3 #define MOD 1000000007 4 using namespace std; 5 long long a,b,N; 6 long long phi[MAX+1],p[MAX],ans[MAX]; 7 bool bo[MAX+1]; 8 long long work(long long n) 9 { 10 if(n<=MAX) return phi[n]; 11 if(ans[N/n]) return ans[N/n]; 12 long long ret=n%MOD*(n+1)%MOD*500000004%MOD; 13 for(long long j=2;j<=n;) 14 { 15 long long nex=n/(n/j); 16 ret=(ret-(nex-j+1)%MOD*work(n/j)%MOD+MOD)%MOD; 17 j=nex+1; 18 } 19 ans[N/n]=ret; 20 return ret; 21 } 22 int main() 23 { 24 int sum=0;phi[1]=1; 25 for(int i=2;i<=MAX;i++) 26 { 27 if(!bo[i]) 28 p[++sum]=i,phi[i]=i-1; 29 for(int j=1;j<=sum && p[j]*i<=MAX;j++) 30 { 31 bo[p[j]*i]=1; 32 phi[i*p[j]]=phi[i]*((i%p[j])?phi[p[j]]:p[j]); 33 if(i%p[j]==0) break; 34 } 35 } 36 for(int i=2;i<=MAX;i++) 37 phi[i]=(phi[i]+phi[i-1])%MOD; 38 scanf("%lld",&a); 39 N=a; 40 printf("%lld\n",work(a)); 41 return 0; 42 }

?

轉載于:https://www.cnblogs.com/wanglichao/p/6837902.html

總結

以上是生活随笔為你收集整理的51nod1244 欧拉函数之和 杜教筛的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。