计蒜客 - 质数原根

题目:

样例:

思路:

首先要清楚原根这一概念,其实在数论中还挺重要的. 认识原根又需要了解的概念

移步巨巨的博客: 阶和原根

这道题用到的就是博客里的定理2: 每一个素数p都有ϕ(p1)个原根。事实上, 每一个数m都有ϕ(ϕ(m))个原根(如果有的话).
所以直接求ϕ(p1)即可
代码:
 1 #include <iostream>
 2 using namespace std;
 3 
 4 int main()
 5 {
 6     ios::sync_with_stdio(false);
 7     cin.tie(0);
 8     int p;
 9     while (cin >> p) {
10         int n = p - 1;
11         int ans = p - 1;
12         for (int i = 2; i * i <= n; i++) {
13             if (n % i == 0) {
14                 ans = ans / i * (i - 1);
15                 while (n % i == 0)
16                     n /= i;
17             }
18         }
19         if (n > 1)
20             ans = ans / n * (n - 1);
21         cout << ans << endl;
22     }
23     return 0;
24 }

 

 

posted @ 2019-04-30 22:28  域Anton  阅读(242)  评论(0)    收藏  举报