URAL 1456 求a模n的阶

简介:

首要条件是a,n互素,也就是求a^x=1(n)最小的x,根据欧拉函数可知最大为n的欧拉函数值。所以n的欧拉函数值的因子就可以了。

#include <iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<map>
#include<set>
using namespace std;
#define ll long long
ll gcd(ll a,ll b)
{
    return b?gcd(b,a%b):a;
}
ll phi(long long n)
{
    long long rea=n;
    for(int i=2; i*i<=n; i++)
        if(n%i==0)
        {
            rea=rea-rea/i;
            do
                n/=i;
            while(n%i==0);
        }
    if(n>1)rea=rea-rea/n;
    return rea;
}
ll exp_mod(ll a,ll b,ll c)
{
    a%=c;
    ll ans=1;
    while(b)
    {
        if(b&1) ans=ans*a%c;
        b>>=1,a=a*a%c;
    }
    return ans;
}
int main()
{
    ll a,n;
    cin>>a>>n;
    if(gcd(a,n)!=1)
    {
        puts("0");
        return 0;
    }
    ll p=phi(n),l=(ll)sqrt(p*1.0),ans=1e9;
    for(ll i=1; i<=l; i++)
        if(p%i==0)
        {
            if(exp_mod(a,i,n)==1)ans=min(ans,i);
            if(exp_mod(a,p/i,n)==1)ans=min(ans,p/i);
        }
    printf("%I64d\n",ans);
    return 0;
}


目录
相关文章
|
4月前
|
C++
【PTA】​ L1-080 乘法口诀数列​(C++)
【PTA】​ L1-080 乘法口诀数列​(C++)
80 0
【PTA】​ L1-080 乘法口诀数列​(C++)
|
4月前
【每日一题Day350】LC2652倍数求和 | 数学+容斥原理
【每日一题Day350】LC2652倍数求和 | 数学+容斥原理
35 0
|
11月前
华为机试HJ6:质数因子
华为机试HJ6:质数因子
|
存储
【CCCC】L2-018 多项式A除以B (25分),多项式除法
【CCCC】L2-018 多项式A除以B (25分),多项式除法
154 0
|
人工智能
唯一分解定理(算术基本定理)详解——hdu5248和lightoj1341
任何一个大于1的自然数 N,如果N不为质数,那么N可以唯一分解成有限个质数的乘积 N=P1a1 P2a2P3a3…Pnan,这里P1<P2<P3…<Pn均为质数,其中指数ai是正整数。这样的分解称为 N 的标准分解式.
273 0
|
算法 C语言 UED
[解题报告]《算法零基础100讲》(第1讲) 幂和对数
[解题报告]《算法零基础100讲》(第1讲) 幂和对数
[解题报告]《算法零基础100讲》(第1讲) 幂和对数
|
机器学习/深度学习
【PTA】7-10 方阵转置 (15分)
【PTA】7-10 方阵转置 (15分)
498 0
|
人工智能 Python
codeforces1151B Dima(异或的性质)
codeforces1151B题解(异或的性质)
1347 0