不互质的和
给定一个正整数 NN.
你的任务是找到 11 到 N-1N−1 中与 NN 不互质的数的和。
输入
对于每个测试用例,有一行包含正整数 N(1 ≤N ≤1000000000)N(1≤N≤1000000000)。
当 N=0N=0 的时候,输入结束。
输出
对于每个测试用例,您应该在一行中打印 sumsum mod 10000000071000000007。
样例
输入
3 4 0
输出
0 2
1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 const int mod=1e9+7; 5 ll Euler(ll n) 6 { 7 ll m=sqrt(n+0.5); 8 ll ans=n; 9 for(int i=2;i<=m;i++) 10 { 11 if(n%i==0) 12 { 13 ans=ans/i*(i-1); 14 } 15 while(n%i==0) 16 n/=i; 17 } 18 if(n>1) 19 ans=ans/n*(n-1); 20 21 return ans; 22 } 23 int main() 24 { 25 ll n; 26 while(cin>>n && n) 27 { 28 ll ans=Euler(n); 29 ll sum=((1+(n-1))*(n-1))/2; 30 ans=n*ans/2; 31 sum-=ans; 32 sum=sum%mod; 33 cout<<sum<<endl; 34 } 35 return 0; 36 }