为什么两种方式一个对一个错
查看原帖
为什么两种方式一个对一个错
1435692
difficultlong楼主2024/9/12 22:06

当然我写的是暴力写法(我不是要快速算法),但是,我有个地方弄不明白,真的太奇怪了,求大佬讲解讲解。

  1. 这是我错误的代码:
#include<bits/stdc++.h>
using namespace std;
const long long O=1000000000;
bool flag[O];
long long n;
int main(){
	scanf("%lld",&n);
	for(long long i=1;i<=n;i++){
		for(long long j=1;j<=n;j++){
			if(!j%i){
				flag[j]=!flag[j];
			}
		}
	}
	for(long long i=1;i<=n;i++){
		if(flag[i]){
			printf("%lld ",i);
		}
	}
	return 0;
}

2.这是我正确的写法(瞎蒙的):

#include<bits/stdc++.h>
using namespace std;
const long long O=1000000000;
bool flag[O];
long long n;
int main(){
	scanf("%lld",&n);
	for(long long i=1;i<=n;i++){
		for(long long j=1;j<=n;j++){
			if(j%i==0){
				flag[j]=!flag[j];
			}
		}
	}
	for(long long i=1;i<=n;i++){
		if(flag[i]){
			printf("%lld ",i);
		}
	}
	return 0;
}

为什么中间的这点改动会这样呢? !i%j,和i%j==0难道不是同一个意思吗?

2024/9/12 22:06
加载中...