zoukankan      html  css  js  c++  java
  • 【题解】丑数Humble Numbers-C++

    题目描述
    Description
    对于一给定的素数集合 S = {p1, p2, …, pK},如果一个数字,当我们对其做完质因子分解后,其质因子全是来自我们给定的素数集合,则认为这个数字是个丑数。
    注意:我们不认为1 是一个丑数。
    你的工作是对于输入的集合S去寻找第N个丑数。
    Input
    第 1 行: 二个被空间分开的整数:K 和 N , 1<= K<=100 , 1<= N<=100,000.
    第 2 行: K 个被空间分开的整数:集合S的元素
    Output
    第N个丑数。
    Sample Input
    4 19
    2 3 5 7
    Sample Output
    27

    思路
    为了找第i个丑数,那么一定要比第i-1个丑数大,而且是最小的那一个,可以发现比i-1大的丑数一定是比i-1小的丑数乘某个质数得到的,鉴于质数的数量很少,而丑数的数量很大,我们枚举质数,然后枚举丑数,直到大于第i-1个丑数,记录一下,找到所有的符合条件的丑数以后,找出最小值(也可以在寻找的途中更新最小值),那么这个最小值就是第i个丑数。

    代码

     1 #include<bits/stdc++.h>
     2 using namespace std; 
     3 int n,m;
     4 int a[101],b[101],s[100001]={1};
     5 int main()
     6 {
     7     cin>>n>>m;
     8     for(int i=1;i<=n;i++)
     9         cin>>a[i];
    10     for(int i=1;i<=m;i++)
    11     {
    12         int minn=0x7f7f7f7f;
    13         for(int j=1;j<=n;j++)
    14         {
    15             while(a[j]*s[b[j]]<=s[i-1])
    16             {
    17                 b[j]++;
    18             }
    19             if(a[j]*s[b[j]]<minn)
    20         minn=a[j]*s[b[j]];
    21         }
    22         s[i]=minn;
    23     }
    24     cout<<s[m]<<endl;
    25     return 0;
    26 }
    个人博客地址: www.moyujiang.com 或 moyujiang.top
  • 相关阅读:
    【转自百度贴吧】把古诗最后三个字改为“日了狗”,看谁最有才!
    计划!
    [BZOJ2424][HAOI2010]订货
    [BZOJ1026][SCOI2009]windy数
    【作文】高考之外
    [AYYZVijos1761]运输问题
    [BZOJ1047][HAOI2007]理想的正方形
    [NOIP2015]代码
    新的独立博客
    不忘初心,方得始终——NOIP2016前的感悟
  • 原文地址:https://www.cnblogs.com/moyujiang/p/11213481.html
Copyright © 2011-2022 走看看