计蒜客 - 质数原根
Posted antonliu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了计蒜客 - 质数原根相关的知识,希望对你有一定的参考价值。
题目:
样例:
思路:
首先要清楚原根这一概念,其实在数论中还挺重要的. 认识原根又需要了解阶的概念
移步巨巨的博客: 阶和原根
这道题用到的就是博客里的定理2: 每一个素数p都有?(p−1)个原根。事实上, 每一个数m都有?(?(m))个原根(如果有的话).
所以直接求?(p−1)即可
代码:
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 }
以上是关于计蒜客 - 质数原根的主要内容,如果未能解决你的问题,请参考以下文章