2020牛客寒假算法基础集训营3 H题 牛牛的k合因子数

H - 牛牛的k合因子数

链接

题目描述
(题目已经很简单就不再描述了)
合数是指自然数中除了能被1和本身整除外,还能被其他数(0除外)整除的数。
牛牛最近在研究“k合因子数”,所谓“k合数”是指一个数的所有因子中,是合数的因子共有k个。
例如20的因子有1,2,4,5,10,20,其中4,10,20为合数,它有3个合数因子,就称20是一个 “3合因子数”
牛牛想要知道1~n中给定k的情况下k合因子数的数目

题目分析
找的是合数因子,因此先把质数筛走,再筛合数,并统计合数作为因子的次数。

代码

#include <cstdio>
#include <iostream>

using namespace std;

int main()
{
	int n,m;
	scanf("%d%d",&n,&m);
	bool nprime[100001]={1};
	int num[100001]={0};
	int sum[100001]={0};
	//这个sum数组不能开的太小 不然会WA
	for(int i=2;i<=n;i++){
		if(!nprime[i]){
			for(int j=i+i;j<=n;j+=i){
				nprime[j]=1;
			}
		}
	}
	for(int i=2;i<=n;i++){
		if(nprime[i]){
			for(int j=i;j<=n;j+=i){//注意是j=i而不是j=i+i
				num[j]++;
			}
		}
	}
	for(int i=0;i<=n;i++){
		//这里如果加多一个if(nprime[i])的判定貌似更省内存
		sum[num[i]]++;
	}
	for(int i=0;i<m;i++){
		int temp;
		scanf("%d",&temp);
		printf("%d\n",sum[temp]);
	}
}
发布了24 篇原创文章 · 获赞 1 · 访问量 669

猜你喜欢

转载自blog.csdn.net/palax0/article/details/104256021