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
  • 相关阅读:
    全排列
    06-联系人管理(xib应用)
    单键模式
    在mac上截屏的几种方式
    05-Tom猫(UIImageView的简单运用)
    04-图片排列切换
    03-图片浏览器(plist的简单应用)
    02-动态创建按钮
    01-实现图片按钮的缩放、动画效果(block的初步应用)
    oracle 监听动态和静态的配置
  • 原文地址:https://www.cnblogs.com/moyujiang/p/11213481.html
Copyright © 2011-2022 走看看