关于E亿点点问题
  • 板块学术版
  • 楼主hahaxiang
  • 当前回复3
  • 已保存回复3
  • 发布时间2023/3/11 21:44
  • 上次更新2023/10/23 21:50:57
查看原帖
关于E亿点点问题
713562
hahaxiang楼主2023/3/11 21:44
#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的问题

所以为什么呢?

2023/3/11 21:44
加载中...