本文主要是介绍poj 1284 Primitive Roots(数论:欧拉函数),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
我开始还以为是求最小原根呢
直接打表+快速幂取模
后来才发现是求原根的个数
结果为phi(n-1)
证明就不再赘述了,网上很多
而且感觉这种题太偏了,没有必要浪费太多时间
代码如下:
#include <cmath>
#include <cstdio>
#include <iostream>
using namespace std;int euler_phi(int n) {int m = sqrt(n+0.5);int ans = n;for(int i=2; i<=m; ++i) {if(n%i == 0) {n /= i;ans = ans/i*(i-1);while(n%i == 0)n /= i;}}if(n > 1)ans = ans/n*(n-1);return ans;
}int main(void) {int n;while(scanf("%d", &n) != EOF) {cout << euler_phi(n-1) << endl;}return 0;
}
这篇关于poj 1284 Primitive Roots(数论:欧拉函数)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!