当然我写的是暴力写法(我不是要快速算法),但是,我有个地方弄不明白,真的太奇怪了,求大佬讲解讲解。
#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难道不是同一个意思吗?