題意:求小於n的與n不互質的數的和;
分析:
歐拉函數的推廣:
小於n的與n互質的數為phi(n),小於n的與n互質的數的和為phi(n)*n/2;
代碼如下:
#include#include #include using namespace std; typedef long long LL; const int mod = 1000000007; LL phi(LL n) { LL rea=n; for(int i=2;i*i<=n;i++){ if(n%i==0){ rea-=rea/i; while(n%i==0) n/=i; } } if(n>1) rea-=rea/n; return rea; } int main() { LL n; while(cin>>n){ if(n==0) break; cout<<((n-1)*n/2%mod-phi(n)*n/2%mod+mod)%mod<