社区讨论

新人求助,骗分过样例那题,复杂度正确提交TLE

灌水区参与者 5已保存回复 10

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
10 条
当前快照
1 份
快照标识符
@lp14ykee
此快照首次捕获于
2023/11/16 19:56
2 年前
此快照最后确认于
2023/11/16 21:09
2 年前
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;
long long m,b,mod,t,x,y;
bool flag=0;
string id;
long long p[]={0,2,3,5,13,17,31,37};
long long read(){
	long long ret=0,f=1;char ch;
	while((ch=getchar())<'0'||ch>'9')if(ch=='-')f=-1;
	while(ch>='0'&&ch<='9'){
		(ret=(ret<<1)+(ret<<3)+(ch^48)),ch=getchar();
		while(ret>=mod){
			flag=1;
			ret%=mod;
		}
	}
	return ret%mod*f;
}
long long gsc(long long n,long long k,long long md,bool ord=0){
	if(ord==1)return (n%md*k%md)%md;
	long long p=0,q=n%md;
	while(k){
		if(k&1)p=(p+q)%md;
		q=(q<<1)%md;
		k>>=1;
	}
	return p;
}
long long qpow(long long n,long long k,long long md,bool ord=0){
	long long p=1,q=n%md;
	while(k){
		if(k&1)p=gsc(p,q,md,ord)%md;
		q=gsc(q,q,md,ord)%md;
		k>>=1;
	} 
	return p;
}
bool Miller_Rabin(long long n,long long a){
	long long vp=n-1,r=0,pan;
	while(!(vp&1))r++,vp>>=1;
	pan=qpow(a,vp,n);
	if(pan==1)return 1;
	for(int i=0;i<r;i++){
		if(pan==n-1)return 1;
		pan=gsc(pan,pan,n);
	}
	return 0;
}
bool isp(long long n){
	if(n<2)return 0;
	for(int i=1;i<=7;i++){
		if(n==p[i])return 1;
		if(n%p[i]==0)return 0;
		if(!Miller_Rabin(n,p[i]))return 0;
	}
	return 1;
}
int main(){
	cin>>id;
	if(id=="1_998244353"){
		m=998244353;
		mod=998244352;
		cin>>t;
		while(t-->0){
			flag=0;
			b=read();
			if(flag==1)printf("%lld\n",qpow(19,b+mod,m));
			else printf("%lld\n",qpow(19,b,m));
		}
	}else if(id=="1?"){
		m=1145141;
		mod=1145140;
		cin>>t;
		while(t-->0){
			flag=0;
			b=read();
			if(flag==1)printf("%lld\n",qpow(19,b+mod,m));
			else printf("%lld\n",qpow(19,b,m));
		}
	}else if(id=="1?+"){
		m=5211600617818708273ll;
		mod=5211600617818708272ll;
		cin>>t;
		while(t-->0){
			flag=0;
			b=read();
			if(flag==1)printf("%lld\n",qpow(19,b+mod,m));
			else printf("%lld\n",qpow(19,b,m));
		}
	}else if(id=="2p"){
		cin>>t;
		while(t-->0){
			scanf("%lld%lld",&x,&y);
			for(;x<=y;x++){
				if(isp(x))putchar('p');
				else putchar('.');
			}
		}
		putchar('\n');
	}
}
19 分。
还没写完/oh

回复

10 条回复,欢迎继续交流。

正在加载回复...