#include<bits/stdc++.h>
#define int __int128
using namespace std;
int A,x,m;
int block;
int a[1000010];
int z[1000010];
int ans;
int read() {
register int x = 0,f = 1;register char ch;
ch = getchar();
while(ch > '9' || ch < '0'){if(ch == '-') f = -f;ch = getchar();}
while(ch <= '9' && ch >= '0'){x = x * 10 + ch - 48;ch = getchar();}
return x * f;
}
void write(int x){
if(x<0){putchar('-');x=-x;}
if(x>9){write(x/10);putchar(x%10+'0');}
else putchar(x+'0');
return;
}
signed main()
{
A=read();
x=read();
m=read();
if(A<1||A>1e9||m<1||m>1e9||x<1||x>1e12)
a[1919810]++;
if(x==1)
{
printf("1");
return 0;
}
x--;
block=pow(x,0.5);
a[0]=1;
for(int i=1;i<=block;i++)
{
a[i]=a[i-1]*A;
a[i]%=m;
z[i]=z[i-1]+a[i];
z[i]%=m;
}
ans=1;
int xx=x/block;
int f=z[block];
ans+=f;
ans%=m;
for(int i=1;i<xx;i++)
{
f*=a[block];
f%=m;
ans+=f;
ans%=m;
}
int l=xx*block;
int r=x-l;
f=z[r];
for(int i=1;i<=xx;i++)
{
f*=a[block];
f%=m;
}
ans+=f;
ans%=m;
write(ans);
return 0;
}
这份代码wa2,将printf("1");改成a[1919810]++,会re4没有wa
说明应该是x=1输出1的问题
所以为什么呢?