Advertisement

上海计算机学会2021年5月月赛C++丙组T4整除

阅读量:

整除

内存限制: 256 Mb时间限制: 1000 ms

题目描述

给定 n 个数字构成的一个多重集合:a1​,a2​,⋯,an​,请求出,其中有多少元素不能被任意一个在集合中的其他元素整除?

多重集合是指允许出现多个相等元素的集合。

输入格式

第一行:单个正整数 n;
第二行:n 个数字表示 a1​,a2​,⋯,an​。

输出格式

单个自然数:表示集合中不能被其他数字整除的数字个数。

数据范围
  • 1≤ai​≤1,000,000;
  • 对于 50% 的数据:1≤n≤10000;
  • 对于 100% 的数据:1≤n≤100000。
样例数据

输入:
5
3 5 13 9 16
输出:
4
说明:
3,5,13,16均不能被集合中其他数整除,而9可以被3整除

解析:桶排序+埃氏筛

详见代码:

复制代码
 #include<bits/stdc++.h>

    
 using namespace std;
    
 int n;
    
 int t[1000005];
    
 bool b[1000005];
    
 int ans=0;
    
 int main(){
    
     ios::sync_with_stdio(0);
    
     cin.tie(0);
    
     cout.tie(0);
    
     cin>>n;
    
     for(int i=1;i<=n;i++){
    
     int a;
    
     cin>>a;
    
     t[a]++;//桶排序
    
     }
    
     for(int i=1;i<=1000000;i++){
    
     if (t[i]!=0){
    
         for(int j=2*i;j<=1000000;j+=i){//埃氏筛
    
             b[j]=1;
    
         }
    
     }
    
     if(b[i]==0&&t[i]==1){//没被筛掉且只有一个数的
    
         ans++;
    
     }
    
     }
    
     cout<<ans;
    
     return 0;
    
 }
    
    
    
    

全部评论 (0)

还没有任何评论哟~