HDU3199 Hamming Problem 【数论】

Hamming Problem

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 703    Accepted Submission(s): 289

Problem Description

For each three prime numbers p1, p2 and p3, let‘s define Hamming sequence Hi(p1, p2, p3), i=1, ... as containing in increasing order all the natural numbers whose only prime divisors are p1, p2 or p3.

For example, H(2, 3, 5) = 2, 3, 4, 5, 6, 8, 9, 10, 12, 15, 16, 18, 20, 24, 25, 27, ...

So H5(2, 3, 5)=6.

Input

In the single line of input file there are space-separated integers p1 p2 p3 i.

Output

The output file must contain the single integer - Hi(p1, p2, p3). All numbers in input and output are less than 10^18.

Sample Input

7 13 19 100

Sample Output

26590291

Source

Northeastern Europe 2000 - Far-Eastern Subregion

#include <stdio.h>
#define maxn 10000

__int64 dp[maxn] = {1, 1};
__int64 a0, b0, c0, a, b, c;

__int64 min(__int64 u, __int64 v, __int64 x)
{
    __int64 tmp = u;
    if(tmp > v) tmp = v;
    if(tmp > x) tmp = x;

    if(tmp == u) ++a;
    if(tmp == v) ++b;
    if(tmp == x) ++c;

    return tmp;
}

int main()
{
    __int64 i, n;
    while(scanf("%I64d%I64d%I64d%I64d", &a0, &b0, &c0, &n) != EOF){
        a = b = c = 0; dp[0] = 1;
        for(i = 1; i <= n; ++i)
            dp[i] = min(dp[a]*a0, dp[b]*b0, dp[c]*c0);
        printf("%I64d\n", dp[n]);
    }
    return 0;
}
时间: 2024-10-13 02:25:54

HDU3199 Hamming Problem 【数论】的相关文章

UVA 11490 - Just Another Problem(数论)

11490 - Just Another Problem 题目链接 题意:有S个士兵,排成一个矩阵,矩阵中可以有两个洞,要求两个洞上下左右厚度一样,问能缺少士兵的情况数. 思路:推推公式,设厚度为a, 正方形为i, 那么(3 a + 2 i) (2 a + i) = S + 2 i i; 化简一下得到6 i i + 7 a i = S 由于S很大,所以去枚举厚度,这样只要枚举到sqrt(S)就够了,复杂度可以接受 代码: #include <stdio.h> #include <stri

UVa1363 - Joseph&#39;s Problem(数论)

在题目中有三种情况: 1.1<k<n: 2.k == n ; 3.k>n; 对于第一种情况我们可以分为1到k和k到n两个子问题来解. 1.1.1到k: for( i = 1 , sum = 0 ; i <= k ; i ++ ) sum += k %i ; 1.2.k到n: sum =(n-k)*k; 而对于第二种情况就是第一种情况的(1).但是就这样写的话时明显的tle的. 对于第二种情况也可以分为几个小问题来求解: 2.1.1到k/2: for( i = k/2 ; i >

UVA 1363 - Joseph&#39;s Problem(数论)

UVA 1363 - Joseph's Problem 题目链接 题意:给定n, k,求出∑ni=1(k mod i) 思路:由于n和k都很大,直接暴力是行不通的,然后在纸上画了一些情况,就发现其实对于k/i相同的那些项是形成等差数列的,于是就可以把整个序列进行拆分成[k,k/2],[k/2, k/3], [k/3,k/4]...k[k/a, k/b]这样的等差数列,利用大步小步算法思想,这里a枚举到sqrt(k)就可以了,这样就还剩下[1,k/a]的序列需要去枚举,总时间复杂度为O(sqrt(

hdu 3199 Hamming Problem(构造?枚举?)

题意: For each three prime numbers p1, p2 and p3, let's define Hamming sequence Hi(p1, p2, p3), i=1, ... as containing in increasing order all the natural numbers whose only prime divisors are p1, p2 or p3. For example, H(2, 3, 5) = 2, 3, 4, 5, 6, 8, 9

SWJTU2017-6月月赛 G-A Easy Counting Problem[数论][乘法逆元]

传送门:http://www.swjtuoj.cn/problem/2397/ 题解:产生交点的条件为4个点构成四边形对角线产生交点,最大解当产生的交点位置完全不相同时存在.答案为$C_{\text{n}}^4$ 计算组合数时需要使用乘法逆元 代码: 1 #define _CRT_SECURE_NO_DEPRECATE 2 #pragma comment(linker, "/STACK:102400000,102400000") 3 #include<iostream> 4

【转】HDU 3199 Hamming Problem: 规律打表

应该不是数论···逻辑思维?找规律?暂且放到支个分类下··· 我的理解: 数组 num表 保存 只有P1 P2 or P3的因子的 常数 并按递增顺序. 通过已有的常数 每次循环相应的乘以P1 P2 P3, 就保证了表中的 常数 的因子排他性. 也可以 手推+程序显示 探究其规律. #include<iostream> using namespace std; const int Size=100000; long long num[Size]; int main() { long long

CF1174C Special Coloring Problem 数论(质因数性质),构造算法

https://codeforces.com/contest/1174/problem/C 题意:给定一个数字n,构造出一个数组,在这个数组下标[2,n]的区间内,每个元素对(ai,aj)如果i和j是互质数,那么ai != aj  并且数组的最大值要尽量小 思路:2个不相同的质数之间必然是互质数,2个合数如果没有共同的质因数那么也是互质数. 那么对于数字n,构造出的数组的最大值 m>=p ,p为区间[2,n]的质数个数.我们给每个质数下标分配一个独特的值,并让其他所有合数下标等于它们各自其中任意

POJ 2800 Joseph’s Problem 数论找规律

Description 求 Input 两个整数n和k(1<=n,k<=1e9) Output 输出 Sample Input 5 3 Sample Output 7 暴力超时,这样就打下表找下余数的规律.输入100,27,一下子就可以看出来,倒着的看,是一段一段的等差序列. 例如100 25 除数 1    2    3    4    5    6    7    8    9     10     11    12   13 14  15  ......25   26........ 商

hdu4143 A Simple Problem(数论)

题目意思及分析: http://acm.hdu.edu.cn/showproblem.php?pid=4143 /** *@xiaoran *数学题,题意:求满足y*y=x*x+n的最小x,我们可以转化为 *y*y-x*x=n --> (y+x)*(y-x)=n进行进行求解,注意此时k1=(y+x)和 *k2=(y-x)是n的因子,y=(k1+k2)/2; x=(k1-k2)/2; *注意我们求的是x最小,需要从大到小模拟n的因子,知道找到结果退出 *或者不存在 */ AC代码: #includ