关于RE
  • 板块学术版
  • 楼主Lates
  • 当前回复2
  • 已保存回复2
  • 发布时间2020/5/31 13:41
  • 上次更新2023/11/7 01:22:53
查看原帖
关于RE
119062
Lates楼主2020/5/31 13:41

为什么这份代码RE

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
inline int read(){
	register int x=0,v=1,ch=getchar();
	while(!isdigit(ch))v=-1,ch=getchar();
	while(isdigit(ch))x=(x<<1)+(x<<3)+(ch^'0'),ch=getchar();
	return x*v;
}
const int MAX=10000000;
int p[MAX+10],f[MAX+10],mu[MAX+10],pre[MAX+10];
inline void init(){
	mu[1]=1;
	for(register int i=2;i<=MAX;++i){
		if(!f[i]){
			p[++p[0]]=i;
			mu[i]=-1;
		}
		for(register int j=1,x;j<=p[0]&&i*p[j]<=MAX;++j){
			x=i*p[j];if(x>MAX)break;f[x]=1;
			if(i%p[j]==0)break;
			mu[x]=-mu[i];
		}
	}
	for(register int i=1;i<=MAX;++i)pre[i]=pre[i-1]+mu[i]*mu[i];
}
int T,n,M=-1;
signed main(){
	freopen("forest.in","r",stdin);
	freopen("forest.out","w",stdout);
	init();
	T=read();
	while(T--){
		n=read();
		printf("%d\n",pre[n]);
	}
	return 0;
}

这份代码不RE

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
inline int read(){
	register int x=0,f=0,ch=getchar();
	while('0'>ch||ch>'9')f^=ch=='-',ch=getchar();
	while('0'<=ch&&ch<='9')x=(x<<1)+(x<<3)+(ch^'0'),ch=getchar();
	return f?-x:x;
}
const int MAX=10000000;
int p[MAX+10],f[MAX+10],mu[MAX+10],pre[MAX+10];
inline void init(){
	mu[1]=1;
	for(register int i=2;i<=MAX;++i){
		if(!f[i]){
			p[++p[0]]=i;
			mu[i]=-1;
		}
		for(register int j=1,x;j<=p[0]&&i*p[j]<=MAX;++j){
			x=i*p[j];if(x>MAX)break;f[x]=1;
			if(i%p[j]==0)break;
			mu[x]=-mu[i];
		}
	}
	for(register int i=1;i<=MAX;++i)pre[i]=pre[i-1]+mu[i]*mu[i];
}  
int T,n;
signed main(){
	freopen("forest.in","r",stdin);
	freopen("forest.out","w",stdout);
	init();
	T=read();
	while(T--){
		n=read();
		printf("%d\n",pre[n]);
	}
	return 0;
}
2020/5/31 13:41
加载中...