码迷,mamicode.com
首页 > 其他好文 > 详细

HDU 3501 Calculation 2 (欧拉函数)

时间:2014-05-06 11:54:09      阅读:330      评论:0      收藏:0      [点我收藏+]

标签:style   blog   class   code   java   tar   

题目链接

题意 : 求小于n的数中与n不互质的所有数字之和。

思路 : 欧拉函数求的是小于等于n的数中与n互质的数个数,这个题的话,先把所有的数字之和求出来,再减掉欧拉函数中所有质数之和(即为eular(n)*n/2),得到的就是最终结果,所以也是模板题一道。

bubuko.com,布布扣
bubuko.com,布布扣
 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 }
View Code
bubuko.com,布布扣

 

HDU 3501 Calculation 2 (欧拉函数),布布扣,bubuko.com

HDU 3501 Calculation 2 (欧拉函数)

标签:style   blog   class   code   java   tar   

原文地址:http://www.cnblogs.com/luyingfeng/p/3710636.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!