zoukankan      html  css  js  c++  java
  • Evanyou Blog 彩带

      题目传送门

    Primitive Roots
    Time Limit: 1000MS   Memory Limit: 10000K
    Total Submissions: 5434   Accepted: 3072

    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

     


      分析:

      一句话题意:求原根的个数。

      首先,如果知道原根的相关知识,那就可以直接上欧拉函数的板子了。关于原根的知识,请参考这里

      Code:

    //It is made by HolseLee on 11th July 2018
    //POJ 1284
    #include<cstdio>
    #include<cstring>
    #include<cstdlib>
    #include<cmath>
    #include<algorithm>
    #include<iostream>
    #include<iomanip>
    using namespace std;
    const int N=1e5+7;
    int n,phi[N],top,q[10007];
    bool vis[N];
    void ready()
    {
      phi[1]=1;
      for(int i=2;i<N;i++){
        if(!vis[i])phi[q[++top]=i]=i-1;
        for(int j=1,k;j<=top&&(k=i*q[j])<N;j++){
          vis[k]=true;
          if(i%q[j])phi[k]=phi[i]*(q[j]-1);
          else {phi[k]=phi[i]*q[j];break;}
        }
      }
    }
    int main()
    {
      ios::sync_with_stdio(false);
      ready();
      while(cin>>n){
        printf("%d
    ",phi[n-1]);}
      return 0;
    }

     

     

  • 相关阅读:
    java值类型和引用类型
    0513作业
    随机四位验证码
    1-36随机生成6个不重复的数
    java随机数
    0509作业
    作业0508
    字符集
    eclipse快捷键
    数据类型 转换
  • 原文地址:https://www.cnblogs.com/cytus/p/9296443.html
Copyright © 2011-2022 走看看