HDU 3501 Calculation 2
Posted IKnowYou
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HDU 3501 Calculation 2相关的知识,希望对你有一定的参考价值。
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=3501
解题思路:
小于n与n互质的数的和为Eular(n)×n/2
实现代码:
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int MOD=1000000007 ; /* 小于n与n互质的数的和为Eular(n)×n/2 */ long long Eular(long long n){ long long res=n; for(int i=2;i*i<=n;i++){ if(n%i==0){ res=res/i*(i-1); while(n%i==0) n/=i; } } if(n>1) res=res/n*(n-1); return res; } int main(){ long long n; while(cin>>n&&n){ long long ans=n*(n+1)/2-n; ans=ans-Eular(n)*n/2; cout<<ans%MOD<<endl; } return 0; }
以上是关于HDU 3501 Calculation 2的主要内容,如果未能解决你的问题,请参考以下文章