2u求调
查看原帖
2u求调
482610
Mortidesperatslav楼主2023/12/2 13:46
mu[1]=1;
		for(int i=2;i<=1000000;i++){
			if(!pr[i])mu[pr[++cnt]=i]=-1;
			for(int j=1;j<=cnt&&(long long)i*pr[j]<=1000000;j++){
				pr[i*pr[j]]=1;
				if(i%pr[j])mu[i*pr[j]]=-mu[i];
				else break;
			}
		}
		int n;
		long long l,r;
		long long lt,len;
		scanf("%d",&n);
		while(n--){
			cin>>l>>r;
			if(l<=1000000){
				lt=min(r,1000000ll);
				for(int i=l;i<=lt;i++){
					if(!mu[i])putchar('0');
					else if(~mu[i])putchar('+');
					else putchar('-');
				}
				putchar('\n');
				if(r<=1000000)continue;
				l=1000001;
			}
			len=r-l+1;
			for(int i=len;i;i--)g[i]=1,v[i]=1;
			for(int i=cnt;i;i--)
				for(int j=(l+pr[i]-1)/pr[i]*pr[i]-l+1;j<=len;j+=pr[i])
					if((l+j-1)/pr[i]%pr[i]){
						if(g[j])g[j]=-g[j],v[j]*=pr[i];
						else g[j]=0;
					}
			for(int i=1;i<=len;i++){
				int x=(i+l-1)/v[i];
				if(g[i]&&(i+l-1)^v[i]&&isp(x))
					g[i]=-g[i];
				else{
					int y=sqrt(x);
					if(y*y==x)g[i]=0;
				}
				if(!g[i])putchar('0');
				else if(~g[i])putchar('+');
				else putchar('-');
			}
			putchar('\n');
		}

后两个点 wa 了。

2023/12/2 13:46
加载中...