poj 1284 Primitive Roots(求原根的个数)

原创 2013年12月03日 23:28:33
Primitive Roots
Time Limit: 1000MS   Memory Limit: 10000K
Total Submissions: 2590   Accepted: 1459

Description

We say that integer x, 0 < x < p, is a primitive root modulo odd prime p if and only if the set { (xi mod p) | 1 <= i <= p-1 } is equal to { 1, ..., p-1 }. For example, the consecutive powers of 3 modulo 7 are 3, 2, 6, 4, 5, 1, and thus 3 is a primitive root modulo 7.
Write a program which given any odd prime 3 <= p < 65536 outputs the number of primitive roots modulo p.

Input

Each line of the input contains an odd prime numbers p. Input is terminated by the end-of-file seperator.

Output

For each p, print a single number that gives the number of primitive roots in a single line.

Sample Input

23
31
79

Sample Output

10
8
24
 
题意:对于一个数x(0<x<p),若集合{ (xi mod p) | 1 <= i <= p-1 }等于{ 1, ..., p-1 }.则称x为p的一个原根。给出一个数p,求p的原根的个数。
思路:利用了定理:如果n有原根,那么n的原根的数目就是euler(erler(n));由于题中说n为奇素数,故euler(n)就是(n-1),故答案即为euler(n-1);
 
 
AC代码:
#include <iostream>
#include <cmath>
#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <queue>
#include <ctime>

#define ll __int64

using namespace std;
const int maxn = 70000;
int phi[maxn];
int n;
void phi_table()
{
    memset(phi, 0, sizeof(phi));
    phi[1] = 1;
    for(int i = 2; i < maxn; i++)
    if(!phi[i])
    {
        for(int j = i; j < maxn; j += i)
        {
            if(!phi[j]) phi[j] = j;
            phi[j] = phi[j] / i * (i - 1);
        }
    }
}
int main()
{
    phi_table();
    while(~scanf("%d", &n))
    {
        printf("%d\n", phi[n - 1]);
    }
    return 0;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

poj1284 Primitive Roots 【原根】

原根Primitive Root   设m是正整数,a是整数,若a模m的阶等于φ(m),则称a为模m的一个原根。(其中φ(m)表示m的欧拉函数)   假设一个数g对于P来说是原根,那么g^i mo...
  • pbj1203
  • pbj1203
  • 2011年04月12日 01:22
  • 1144

POJ1284 Primitive Roots

题目大意:原根模板题&&欧拉函数模板题,求出模P的原根; 思路:首先根据定理:模m有原根的充要条件:m=1,2,4,p^n,2p^n,其中p是奇素数。 如果模m有原根的话,原根的个数是:φ(φ(m...

POJ_1284_Primitive Roots

Primitive Roots Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 2507  ...

【POJ 1284】Primitive Roots

求奇素数的原根个数~

HDU 4992 Primitive Roots(求出n的所有原根)

题意:求出n的所有原根,不存在原根输出-1。 原根的定义题目已经给出,对于n的原根x,则满足x的y次幂模n等于1的最小y是n的欧拉函数值phi(n),也就是小于等于n且与n互质的个数。 来...

HDU 4992 Primitive Roots(求出n的所有原根)

题目:Primitive Roots

pku1284 Primitive Roots

#include #include #include #include #include #include #include #include #include #include #include #...
  • zz_1215
  • zz_1215
  • 2012年07月10日 19:23
  • 359

原根 poj 1284

题意: 一个集合{(X^i mod p} |  1与集合 {1 ,2 ,……, p-1}是相同的 原根定义   原根Primitive Root。    设m是正整数,a是整数,若a模m的阶等...

原根小结 (poj 1284)

关于原根的一些知识点: 定义1:设,,使得成立的最小的,称为对模的阶,记为。 定理1:如果模有原根,那么它一共有个原根。 定理2:若,,,则。 定理3:如果为素数,那么素数一...
  • whai362
  • whai362
  • 2015年02月05日 10:50
  • 1085

SGU 261 Discrete Roots(原根+高次同余方程+线性同余方程)

Description 给出三个整数p,k,a,输出方程x^k=a(mod p)的所有解 Input 三个整数p,k,a (2...
  • V5ZSQ
  • V5ZSQ
  • 2016年01月05日 13:11
  • 378
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:poj 1284 Primitive Roots(求原根的个数)
举报原因:
原因补充:

(最多只允许输入30个字)