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; }
自己选的路,跪着也要把它走完------ACM坑