题目:
样例:
思路:
首先要清楚原根这一概念,其实在数论中还挺重要的. 认识原根又需要了解阶的概念
移步巨巨的博客: 阶和原根
这道题用到的就是博客里的定理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 }
原文地址:https://www.cnblogs.com/AntonLiu/p/10798361.html
时间: 2024-10-20 22:20:26