标签:style blog class code java tar
题意 : 求小于n的数中与n不互质的所有数字之和。
思路 : 欧拉函数求的是小于等于n的数中与n互质的数个数,这个题的话,先把所有的数字之和求出来,再减掉欧拉函数中所有质数之和(即为eular(n)*n/2),得到的就是最终结果,所以也是模板题一道。
1 //3501 2 #include <iostream> 3 #include <stdio.h> 4 #include <stdlib.h> 5 #include <string.h> 6 #include <math.h> 7 8 using namespace std; 9 10 int main() 11 { 12 long long x; 13 while (scanf("%I64d", &x) && x) 14 { 15 long long res = x; 16 long long temp = x ; 17 for (int i = 2 ; i < sqrt(x) + 1 ; i++) 18 { 19 if (x % i == 0 ) 20 { 21 res = res / i * (i -1); 22 while (x % i ==0) 23 x /= i; // 保证i一定是素数 24 } 25 } 26 if (x > 1) 27 res = res / x * (x -1); 28 long long sum = temp * (temp + 1)/2-temp ; 29 sum -= res*temp/2 ; 30 sum %= 1000000007 ; 31 printf("%I64d\n", sum); 32 } 33 return 0; 34 }
HDU 3501 Calculation 2 (欧拉函数),布布扣,bubuko.com
标签:style blog class code java tar
原文地址:http://www.cnblogs.com/luyingfeng/p/3710636.html