zoukankan      html  css  js  c++  java
  • HDU 3501 Calculation 2 (欧拉函数)

    题目链接

    题意 : 求小于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
    ", sum);
    32     }
    33     return 0;
    34 }
    View Code
  • 相关阅读:
    子矩阵
    [Ahoi2008]Meet 紧急集合
    立体图
    CF933B A Determined Cleanup
    CF746G New Roads
    树的重量
    CF519E A and B and Lecture Rooms
    矩阵
    深入浅出乘法逆元
    20180519模拟赛T2——pretty
  • 原文地址:https://www.cnblogs.com/luyingfeng/p/3710636.html
Copyright © 2011-2022 走看看