zoukankan      html  css  js  c++  java
  • 43 丑数

    43 丑数

    作者: Turbo时间限制: 1S章节: 枚举

    问题描述 :

    对于一给定的素数集合 S = {p1, p2, ..., pK}, 来考虑那些质因数全部属于S 的数的集合。

    这个集合包括,p1, p1p2(即p1乘以p2), p1p3, 和 p1p2p3 (还有其它很多)。

    这是个对于一个集合S的丑数集合。注意:我们不认为1 是一个丑数。

    你的工作是对于输入的集合S去寻找集合中的第N个丑数。

    说明:结果不超过32位整数能表示的范围

    比如:S={2, 3, 5, 7}

    则前15个丑数为:

    2,3,4,5,6,7,8,9,10,12,14,15,16,18,20

    输入说明 :

    第 1 行: 2个被空格分开的整数:K 和 N , 1<= K<=100 , 1<= N<=100,000.

    第 2 行: K 个被空格分开的整数,即集合S的元素

    输出说明 :

    单独的一行,即第N个丑数。

    输入范例 :
    4 15
    2 3 5 7

    输出范例 :
    20

    #include <iostream>
    using namespace std;
    #define MIN 2147483647
    int p[101], step[101] = { 0 };//p[]存放质数 step[]存放位置
    int ugly[100001];
    int main()
    {
    	int n, m;//n个数 求第m个
    	cin >> n >> m;
    	for (int i = 1; i <= n; i++)
    	{
    		cin >> p[i];
    	}
    	ugly[0] = 1;
    	for (int i = 1; i <= m; i++)
    	{
    		int min = MIN;
    		for (int j = 1; j <= n; j++)
    		{
    			int sum = p[j] * ugly[step[j]];
    			while (sum <= ugly[i - 1])
    			{
    				step[j]++;
    				sum = p[j] * ugly[step[j]];
    			}
    			if (min > sum)
    			    min = sum;
    		}
    		ugly[i] = min;
    	}
    	cout << ugly[m] << endl;
    	return 0;
    }
    
    Yesterday is history,tomorrow ismystery,but today is a gift!That why it is called Present!
  • 相关阅读:
    导入别人的flex项目出现的问题
    HTTP通信原理
    java 代码的细节优化
    跨服务器之间的session共享
    spring整合hibernate配置文件
    java中时间类型的问题
    Hibernate注解映射sequence时出现无序增长问题+hibernate 映射 oracle ID自动增长:
    并发处理方案 个人总结
    MsSqlserver 查看锁表与解锁
    c# CTS 基础数据类型笔记
  • 原文地址:https://www.cnblogs.com/VictorierJwr/p/12865158.html
Copyright © 2011-2022 走看看