1174-查找特定的合数


本文总阅读量

题目要求第m个含x个不同质因数的合数,所以常规想法就是要计算出合数含有多少个不同的质因数。
那么这题跟筛法又有什么联系呢?
含有不同质因数的合数在筛法中有一个规律:它会被划到多次。
例如6=23,所以6会被23划到,原本筛法,被划到标记为1,现在要求划到的次数,所以不能赋值为1,而是需要用累加计算。
还有一个地方需要注意,就是因数的范围,不再是sqrt(),比如把题目范围改成1010的平方根约等于3,可是10=25,用平方根只划到3,不会划到5,所以至少要范围的一半,比如5。题目最大值为200000,那么需要扫到100000

for(int i = 2; i <= 100000; i++){
	if(a[i]==0){
		for(int j = i * 2; j <= 200000; j += i){
			a[j]++;
		}
	}
}

筛法结束后,再按题目要求统计,找到对应的数后再输出。

for(int i = 2; i <= 200000; i++){
	if(a[i]==x){
		sum++;
		if(sum==m){
			输出i并跳出循环或结束程序;
		}
	}
}

本站总访问量