HDOJ 3501 Calculation 2 (欧拉函数)

来源:互联网 发布:tensorflow.org打不开 编辑:程序博客网 时间:2024/05/22 14:26

Calculation 2

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 3137    Accepted Submission(s): 1297


Problem Description
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
340
 

Sample Output
02题意:求小于n且与n互质的数的和思路:欧拉函数,和n互素的之和为:n*eular(n)/2,然后前n项和减一下就行了。ac代码:
#include<stdio.h>#include<string.h>#include<math.h>#include<iostream>#include<algorithm>#define MAXN 100100#define MOD 1000000007#define LL long long#define INF 0xfffffffusing namespace std;LL eular(LL n){      LL i,res=n;      for(i=2;i*i<=n;i++)          if(n%i==0){              res=res/i*(i-1);              while(n%i==0)n/=i;          }      if(n>1) res=res/n*(n-1);      return res;  }int main(){    LL n;while(scanf("%lld",&n)!=EOF,n){LL ans=((n*(n-1)/2)-((n*eular(n)/2)))%MOD;printf("%lld\n",ans);}     return 0;}


0 0
原创粉丝点击