今天的题难啊啊啊啊啊
问题 G: 查找特定的合数
时间限制: 1 Sec 内存限制: 128 MB
[提交] [状态]
题目描述
自然数中除了能被1和本身整除外,还能被其他数整除的数叫合数。每个合数都可以写成几个质数相乘的形式,这几个质数都叫做这个合数的质因数。比如8=2×2×2,2就是8的质因数。在1—N(N≤200000)按从小到大顺序排列的自然数序列中,查找第M个有X(2≤X≤6)个不同质因数的合数。例如,第3个有2个不同质因数的合数是12(12只有2、3两个不同的质因数,在12之前有2个不同质因数的合数分别为6和10)。
输入
共1行,分别为M,X。
输出
共1行,为第M个有X个不同质因数的合数。
样例输入 Copy
3 2
样例输出 Copy
12
自己仔细揣摩
暴力会超
#include <bits/stdc++.h>
using namespace std;
const int mod=2e5+5;
typedef long long ll;
int A[mod]={2};
int main()
{
int m,x,k=0;
scanf("%d%d",&m,&x);
int ans;
for(int i=3;m>0&&i<=200000;i++)
{
int a=i,num=0;
for(int j=0;(A[j]*2<=i)&&(j<=k)&&(A[j]<=a);j++)
{
if((a%A[j])==0)
{
num++;
while((a%A[j])==0)
{
a/=A[j];
}
}
if(num>x) break;
}
if(num==0) A[++k]=i;
if(num==x)
{
m--;
ans=i;
}
}
printf("%d",ans);
return 0;
}
/**************************************************************
Problem: 10187
User: 2019UPC110
Language: C++
Result: 正确
Time:928 ms
Memory:2804 kb
****************************************************************/