题意:求小于n 的与n不互质的数的和。
小于n与n互质的欧拉函数的和 sum = n*(phi(n))/ 2;
所以结果就是 ans= (n-1)*n / 2 - sum;
#include<cstdio>
#include<cstring>
#include<cmath>
#define ll long long
const int mod=1000000007;
ll phi(ll n)
{
ll m=(ll)sqrt(n+0.5);
ll sum=n;
for(ll i=2;i<=m;i++)
{
if(n%i==0)
{
sum=sum/i*(i-1);
while(n%i==0) n/=i;
}
}
if(n>1) sum=sum/n*(n-1);
return sum;
}
int main()
{
ll n;
while(scanf("%I64d",&n)&&n)
{
ll ans=(ll)( n*phi(n)/2 );
ans=ans%mod;
ans=( ( (n-1)*n/2 )%mod -ans )%mod;
if(ans<0) ans=(ans+mod)%mod;
printf("%I64d\n",ans);
}
return 0;
}