2020-2-15新生赛

今天的题难啊啊啊啊啊

问题 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
****************************************************************/
发布了32 篇原创文章 · 获赞 1 · 访问量 1331

猜你喜欢

转载自blog.csdn.net/QXK_Jack/article/details/104334896
今日推荐