【牛客】小白月赛101E-tb的数数问题

传送门

  • 复盘:刚开始想到用质因数分解方法 但是板子又忘记了 暴力取模只能过10%
  • 晚上思路有很多 我选了最简单的那种 就是先用数组模拟去重复,然后遍历区间【1-数组的最大值】找到数组中没出现的数 然后线性筛选标记上false 最后遍历一遍数组 看看那些被打上标记就是不符号条件的 输出没有打上标记的数量
    accode
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+5;
int num[N],n,cnt[N],flag[N];
int main(){
	cin>>n;
	int ctnum=0;
	for(int i=1;i<=n;i++){
		int t;cin>>t;
		if(cnt[t]>0) continue;
		else{
			num[++ctnum]=t;
			cnt[t]++;//记录重复个数
		}
	}
	sort(num+1,num+ctnum+1);
	// for(int i=1;i<=ctnum;i++) cout<<num[i]<<endl;
	for(int i=1;i<=num[ctnum]-1;i++){
		if(cnt[i]==0){
			// cout<<i<<endl;
			for(int j=1;j*i<=num[ctnum];j++){
				flag[j*i]=1;
			}
		}
	}
	int res=0;
	for(int i=1;i<=ctnum;i++){
		if(flag[num[i]]==0){
			// cout<<num[i]<<endl;
			res+=1;
		} 
	}
	cout<<res<<endl;
	return 0;
	
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值