欧拉函数+公式(i&n-i)成对出现,sum=n*(n-1-eular(n))/2,ok
ACcode:
#include<stdio.h>
#include<math.h>
#include<iostream>
#define LL long long
using namespace std;
const int MOD=1000000007;
int n;
int eular(int n)
{
int i,k=n;
for (i=2;i<=sqrt((double)n);i++)
{
if (n%i==0)
{
k=k/i*(i-1);
while (n%i==0) n/=i;
}
}
if (n>1) k=k/n*(n-1);
return k;
}
int main()
{
while (scanf("%d",&n)&&n)
printf("%I64d\n",((LL)n*(n-1-eular(n))/2)%MOD);
return 0;
}