傳送門:Calculation 2
Calculation 2
Source : GTmac | |||
Time limit : 1 sec | Memory limit : 64 M |
Submitted : 221, Accepted : 94
Background
Given a positive integer N, your task is to calculate the sum of the positive integers less than N which are not coprime to N. A is said to be coprime to B if A, B share no common positive divisors except 1.
Input
For each test case, there is a line containing a positive integer N(1 ≤ N ≤ 1000000000). A line containing a single 0 follows the last test case.
Output
For each test case, you should print the sum module 1000000007 in a line.
Sample Input
3 4 0
Sample Output
0 2
解題報告:
題意是求和n不互質的數的總和。可用總和1-(n-1)減去互質的數的總和。課用歐拉函數求1-n的互質的數的個數num。
則若a和n互質,n-a必定也和n互質(a<n)。也就是說num必定爲偶數。其中互質的數成對存在。其和爲n。則總和爲num*n/2
代碼如下:
#include <stdio.h>
long long eular(long long n){
long long ret=1,i;
for(i=2;i*i<=n;i++)
if (n%i==0){
n/=i,ret*=i-1;
while (n%i==0)
n/=i,ret*=i;
}
if (n>1)
ret*=n-1;
return ret; //n的歐拉數
}
int main(){
long long n;
while(scanf("%lld",&n)==1&&n){
long long sum=n*(n+1)/2-n;
sum-=eular(n)*n/2;
printf("%lld\n",sum%1000000007);
}
return 0;
}