• hdu-2619 Love you Ten thousand years


    题目链接:

    http://acm.hdu.edu.cn/showproblem.php?pid=2619

    题目大意:

    求出小于n的数的个数,满足ki mod n,1inn

    解题思路:

    n为奇素数,这个条件立马想到了原根,奇素数必定存在原根,而且每个原根a对应着一个模n简化剩余系。

    n为奇素数,那么其欧拉函数值为n-1,简化剩余系就是1 2 3 ...... n - 1,正好是模n的完全剩余系。

    这道题就转化成求出n的原根。

    由定理,若m存在原根,则原根数目为φ(φ(m)),因为m是素数,φ(m) = m - 1,之需要求出φ(m - 1)即可

    所以调用两次求欧拉函数值即可。

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 typedef long long ll;
     4 int euler_phi(int n)//求单个
     5 {
     6     int m = (int)sqrt(n + 0.5);
     7     int ans = n;
     8     for(int i = 2; i <= m; i++)if(n % i == 0)
     9     {
    10         ans = ans / i * (i - 1);
    11         while(n % i == 0)n /= i;
    12     }
    13     if(n > 1)ans = ans / n * (n - 1);
    14     return ans;
    15 }
    16 int main()
    17 {
    18     int n;
    19     while(cin >> n)
    20     {
    21         cout<<euler_phi(euler_phi(n))<<endl;//这样也行:cout<<euler_phi(n - 1)<<endl;
    22     }
    23     return 0;
    24 }
  • 相关阅读:
    MyBatis_2
    JDBC(java database connectivity)
    异常的各种情况
    Spring(一)
    SpringMVC(四)
    SpringMVC(三)
    SpringMVC(二)
    springMVC文件上传、拦截器、数据校验
    springMVC数据相关
    初步接触springMVC
  • 原文地址:https://www.cnblogs.com/fzl194/p/9038232.html
Copyright © 2020-2023  润新知