70pts求助
查看原帖
70pts求助
663195
Z_AuTwT楼主2024/4/16 17:19
#include<bits/stdc++.h>
using namespace std;
#define int __int128
inline __int128 read(){
	char ch=getchar();
	__int128 res=0,f=1;
	for(;ch<'0'||ch>'9';ch=getchar())if(ch=='-')f=-1;
	for(;ch>='0'&&ch<='9';ch=getchar())res=(res<<3)+(res<<1)+(ch-'0');
	return res*f;
}
void write(__int128 x){
    if(x<0) putchar('-'),x=-x;
    if(x>9) write(x/10);
    putchar(x%10+'0');
    return;
}
int m,a,c,x0,n,g,x,y;
int exgcd(int a,int b){
    if(b==0){
        x=1;
        y=0;
        return a;
    }
    int d=exgcd(b,a%b);
    int Next_x=x;
    x=y;
    y=Next_x-a/b*y;
    return d;
}
int phi(int n){
    int ans=n;
    for(int i=2;i<=sqrt((long long)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;
}
__int128 qMul(__int128 a,__int128 b,__int128 mod){
    __int128 ans=0;
    while(b){
        if(b&1) ans=(ans+a)%mod;
        a=(a+a)%mod;
        b>>=1;
    }
    return ans;
}
int qpow(int A,int b){
	int ans=1;
	while(b){
		if(b&1) ans=ans*A%m;
		A=A*A%m;
		b>>=1;
	}
	return ans;
}
main(){
	m=read(),a=read(),c=read(),x0=read(),n=read(),g=read();
	if(n<=1e8){
	    for(int i=1;i<=n;i++){
            x0=(a*x0+c)%m;
        }
        write(x0%g);
	}
	else{
    	exgcd(a-1,m);
    	write(((qpow(a,n)*x0%m+c%m*(((qpow(a,n)==0?m-1:qpow(a,n)-1))%m+m)%m*x%m)%m+m)%m%g);
	}
}
2024/4/16 17:19
加载中...