计蒜客 - 质数原根

Posted antonliu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了计蒜客 - 质数原根相关的知识,希望对你有一定的参考价值。

题目:

技术图片

样例:

技术图片

思路:

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

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

这道题用到的就是博客里的定理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 }

 

 

以上是关于计蒜客 - 质数原根的主要内容,如果未能解决你的问题,请参考以下文章

计蒜客之判断质数

计蒜客练习题:互质数个数

计蒜客练习题:素数距离

计蒜客NOIP2017提高组模拟赛day1

计蒜客 2017 NOIP 提高组模拟赛Day1 T1 小X的质数 线性筛素数

计蒜客 蓝桥模拟 B.素数个数