问题标题: 酷町堂:3904 不是倍数的数

0
0

0
已采纳
汪恺恒
汪恺恒
中级启示者
中级启示者

用桶

输入

cin>>a[i];
   b[a[i]]=1;
   maxn=max(a[i],maxn); 

之后处理倍数

for(int i=1;i<=n;i++){
        for(int j=a[i]*2;j<=maxn;j+=a[i]){//遍历a[i]的倍数
            if(b[j]){//这个数存在
                c[j]=1;//标为有因数
            }
        }
    }

然后遍历1~maxn,如果c[i]==1,则cnt++

最后输出n-cnt

0
张恩泽
张恩泽
高级天翼
高级天翼

这道题用埃氏筛法

先写一个循环1到n,然后再从a[i]*2开始,每次加a[i],这样的话,j必定是a[i]的倍数,然后再判断在b数组里,j存不存在就可以了

代码参考楼上

就采纳他吧

不为被采纳,只为1个经验

我要回答