re求助求助
查看原帖
re求助求助
1015805
xiao__xiao楼主2023/12/14 15:43

只过了13这个特判点其余全部re了

#include<bits/stdc++.h> 
#define ull unsigned long long
#define lch(x) t[x].s[0] 
#define rch(x) t[x].s[1]
#define INF 0x3f3f3f3f
#define ll long long 
#define lll __int128
#define re register
#define inl inline
#define N 500500
#define rx x<<1|1
#define lx x<<1
using namespace std;

const int mod = 999911659 ;
int a[] = {2,3,4679,35617} ,anx[N];
ll f[4][N] ,g[4][N] ;
int n ,q ;

inline int read(){
	int w = 1 ,s = 0;
	char ch = getchar();
	while(!isdigit(ch)){
		if(ch=='-') w = -1;
		ch = getchar();
	}
	while(isdigit(ch)){
		s = (s<<3)+(s<<1)+ch-'0';
		ch = getchar();		
	}
	return w*s;
}

ll qpow(ll x,ll k,ll mod){
	ll res = 1;
	while(k){
		if(k & 1) res = res * x % mod ;
		x = x * x % mod ;
		k >>= 1;
	}
	return res;
}

inl int init(){
	for(int i = 0;i < 4;i ++ ){
		f[i][0] = g[i][0] = 1;
		int mod = a[i] ;
		for(int j = 1;j <= a[i];j ++ ){
			f[i][j] = f[i][j-1] * j % mod;
			g[i][j] = g[i][j-1] * qpow(j,mod-2,mod) % mod;
		}
	}
}

ll get(int x,int y,int k,int mod){
	if(y > x) return 0;
	return f[k][x] * g[k][y] % mod * g[k][x-y] % mod;
}

ll lucas(int x,int y,int k,int mod){
	if(!y) return 1;
	return lucas(x/mod,y/mod,k,mod) * get(x%mod,y%mod,k,mod) % mod;
}

ll exgcd(ll a,ll b,ll &x,ll &y){
	ll d = a ;
	if(!b) x = 1 ,y = 0 ;
	else d = exgcd(b,a%b,y,x) ,y -= a / b * x;
	return d;
}

inl ll CRT(){
	ll ans = 0;
	int md = 999911658;
	for(int i = 0;i < 4;i ++ ){
		int k = md / a[i] ;
		ll x ,y ;
		exgcd(k,a[i],x,y) ;
		x = (x % a[i] + a[i]) % a[i] ;
		ans = (ans + x * k % md * anx[i] % md) % md;
	}
	return (ans % md + md) % md;
}

inl void work(){
	init();
	
	for(int i = 1;i * i <= n;i ++ ){
		if(n % i == 0){
			for(int j = 0;j < 4;j ++ ) {
				anx[j] = ((lucas(n,i,j,a[j]) + anx[j]) % a[j] +a[j]) % a[j];
			}
			if(n / i != i){
				for(int j = 0;j < 4;j ++ ) {
					anx[j] = ((lucas(n,n/i,j,a[j]) + anx[j]) % a[j] +a[j]) % a[j];
				}
			}
		}
	}
	
	ll res = CRT() ;
	cout << qpow(q,res,mod);
}

int main(){
	ios::sync_with_stdio(false);
	cin >> n >> q ;
	
	if(q == mod) {
		cout << 0 ;
		return 0;
	}
	
	work();
}
2023/12/14 15:43
加载中...