出怪事了
查看原帖
出怪事了
939580
xzy_caiji楼主2023/11/12 14:16

样例没过交上去100?怪了

#include<bits/stdc++.h>
#define int long long
using namespace std;
int g,nn,sum,ys[10]={0,2,3,4679,35617},b[10];
int qpow(int x,int y,int p){
	 int res=1;
	 while(y){
	 	if(y&1)res=res*x%p;
	 	x=x*x%p;
	 	y>>=1;
	 }
	 return res;
}
int c(int n,int m,int p){
	if(m>n)return 0;
	int a=1,b=1;
	for(int i=n;i>n-m;i--)a=(a%p*(i%p))%p;
	for(int i=1;i<=m;i++)b=(b%p*(i%p))%p;
	return a*qpow(b,p-2,p)%p;
}
int lucas(int n,int m,int p){
    if(m==0)return 1;
    return c(n%p,m%p,p)*lucas(n/p,m/p,p)%p;
}
void exgcd(int a,int b,int &x,int &y){
    if(b==0){x=1,y=0;return;}
    exgcd(b,a%b,x,y);
    int t=x;x=y;y=t-a/b*y;
}
int CRT(){
    int m=999911658,ans=0;
    for(int i=1;i<5;i++){
        int mi=m/ys[i],x,y;
        exgcd(mi,ys[i],x,y);
        ans=((ans+mi*x*b[i])%m+m)%m;
    }
    return ans;
}
int exlucas(int n,int m){
    for(int i=1;i<5;i++)b[i]=lucas(n,m,ys[i]);
    return CRT();
}
signed main(){
    cin>>nn>>g;
    if(g==999911659){cout<<0;return 0;}
    for(int i=1;i*i<=nn;i++){
        if(i*i==nn){
            sum+=exlucas(nn,i);sum%=999911658;
        }
        if(nn%i==0){
           sum+=exlucas(nn,i)+exlucas(nn,nn/i);sum%=999911658;
        }
    }
    cout<<qpow(g,sum,999911659);
}
2023/11/12 14:16
加载中...