思路+代码
2024-11-10 22:56:48
发布于:江苏
9阅读
0回复
0点赞
回到题目
这道题要把每一个数的因子个数统计出来并排序,先判断最多的一个数的因子个数是否大于等于m,不满足就从大到小把每个数的因子个数相加并判断是否大于等于m,成立就直接输出。
#include <iostream>
#include <algorithm>
using namespace std;
int s(int n)//统计每一个数的因子个数
{
int t=0;
for (int i=1; i*i<=n; i++)
{
if (n%i==0) t+=2;
if (i*i==n) t--;//会出现例如2*2的情况,要特判
}
return t;
}
long long n,m,x,a[(int)1e7],rt[(int)1e7],dp[(int)1e7];
int main()
{
cin >> n >> m;
for (int i=1; i<=n; i++)
{
cin >> a[i];
dp[i]=s(a[i]);
}
sort(dp+1,dp+n+1);
if (dp[n]>=m) x=1;//判断最多的一个数的因子个数是否大于等于m
else//否则找到最少的数的因子个数且大于等于m
{
int s=0;
for (int i=n; i>=1; i--)
{
s+=dp[i];
if (s>=m)
{
x=n-i+1;
break;
}
}
}
cout << x;
return 0;
}
这里空空如也
有帮助,赞一个