欧拉函数 || Calculation 2 || HDU 3501
题面:3501
题解:欧拉函数的基础应用,再套个很 easy 的等差数列前 n 项和就成了。
啊,最近在补作业+准备月考+学数论,题就没怎么写,感觉菜得一匹>_<
CSL加油加油~!
代码:
1 #include<cstdio> 2 #include<cmath> 3 #define ll long long 4 #define mod(a) ((a)>=MOD?(a)%MOD:(a)) 5 using namespace std; 6 const ll MOD=1000000007; 7 ll N,sq,phi,n; 8 int main(){ 9 scanf("%lld",&N); 10 while(N){ 11 phi=N; 12 sq=sqrt(N); 13 n=N; 14 for(int i=2;i<=sq;i++){ 15 if(n%i==0){ 16 phi=mod(phi*(i-1)/i); 17 while(n%i==0) n/=i; 18 } 19 } 20 if(n>1) phi=mod(phi*(n-1)/n); 21 phi=mod(phi*N/2); 22 printf("%lld\n",mod((1+N)*N/2-N-phi+MOD)); 23 scanf("%lld",&N); 24 } 25 return 0; 26 }
By:AlenaNuna
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步