不互质的和

不互质的和

给定一个正整数 NN.

你的任务是找到 11 到 N-1N1 中与 NN 不互质的数的和。

输入

对于每个测试用例,有一行包含正整数 N(1 ≤N ≤1000000000)N(1N1000000000)。

当 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 }

 

posted @ 2020-09-08 23:52  秘之洋洋  阅读(268)  评论(0)    收藏  举报