萌新求调
  • 板块学术版
  • 楼主小熙熙
  • 当前回复4
  • 已保存回复4
  • 发布时间2022/7/11 17:20
  • 上次更新2023/10/27 21:03:45
查看原帖
萌新求调
489327
小熙熙楼主2022/7/11 17:20
#include <iostream>
#include <cstring>
using namespace std;
typedef long long ll;

ll quickpow(ll x, ll y, ll z) {
    ll ans = 1;
    while (y) {
        if (y & 1)
            ans = ans * x % z;
        x = x * x % z;
        y >>= 1;
    }
    return ans;
}
ll phi(ll n) {
    ll rea = n;
    for (int i = 2; i * i <= n; i++) {
        if (n % i == 0) {
            rea = rea / i*(i-1);
            while (n % i == 0)
                n /= i;
        }
    }
    if (n > 1)
        rea = rea - rea / n;
    return rea;
}
char a[20000005];
int main() {
    ll x,z;
    cin>>x>>z>>a;
    ll len=strlen(a);
    ll p=phi(z);
    ll ans=0;
    for(int i=0;i<len;i++){
    	ans=(ans*10+a[i]-'0')%p;
	}
    ans+=p;
    cout<<quickpow(x,ans,z)<<endl; 
    return 0;
} 

萌新求调 不知道哪一步需要加什么特判

2022/7/11 17:20
加载中...