原根

一、定义
设m > 1 且 gcd(a, m) = 1, 则使得a^t ≡ 1(mod m) 成立的最小的正整数t称为a对模m的阶, 记为δm(a)。

如果a的阶(mod m)为ϕ(m), 则称a为m的一个原根。 即若δm(a)=ϕ(m), 则称a为m的一个原根。

二、定理
定理1:若g是m的一个原根,则 g,g2,⋯,gϕ(m)
各数对模m的最小剩余,恰是小于m且与m互素的ϕ(m)个正整数的一个排列。

定理2:每一个素数p都有ϕ(p−1)个原根。事实上, 每一个数m都有ϕ(ϕ(m))个原根(如果有的话)。即 若 n 为素数 ϕ(p−1) = ϕ(ϕ§)

三、求解

#include<bits/stdc++.h>
using namespace std;

int Euler(int n)
{
    int ans=n;
    for(int i=2; i*i<=n; i++)
    {
        if(n%i==0)
        {
            ans=ans/i*(i-1);
            while(n%i==0)
                n/=i;
        }
    }
    if(n>1)
        ans=ans/n*(n-1);
    return ans;
}

int main()
{
    int n;
    while(~scanf("%d",&n))
    {
        printf("%d\n",Euler(Euler(n)));
    }
    return 0;
}
发布了341 篇原创文章 · 获赞 110 · 访问量 2万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览