HDU 4952 Number Transformation 规律题

打表可以知道到后面增量都一样了,,

推论就是  i 和 i+1 互质

#include <cstdio>
#include <algorithm>
#include <cstring>
#include <iostream>
using namespace std;
typedef long long ll;
const ll mx = 120000;

int main() {
    int cas = 0;
    ll x, k, y, dis, i;
    while (~scanf("%I64d%I64d", &x, &k)) {
        if (0 == x && 0 == k)
            break;

        for (i = 2; i <= k && i <= mx; ++i) {
            if (x % i == 0)
                continue;
            x = x / i * i + i;
        }
        if (i <= k) {
            dis = x / i * i + i - x;
            x += dis * (k - i + 1);
        }
        printf("Case #%d: %I64d\n", ++cas, x);
    }
    return 0;
}
/*
10000000 10000000
35670000000

150000 150001
65550437
*/

HDU 4952 Number Transformation 规律题

时间: 2024-10-14 15:48:15

HDU 4952 Number Transformation 规律题的相关文章

hdu 4952 Number Transformation (找规律)

题目链接 题意:给你个x,k次操作,对于第i次操作是:要找个nx,使得nx是>=x的最小值,且能整除i,求k次操作后的数 分析: 经过打表找规律,会发现最后的x/i,这个倍数会趋于一个固定的值,求出这个固定的值和K相乘就可以了, 为什么会趋于固定的值呢,因为最后虽然i在不断增长,但是x也是在增长的,每次的倍数会回退一个发现 有余数,然后再加上一个,所以趋于稳定. 官方题解: 1 #include <iostream> 2 #include <cstdio> 3 #includ

HDU 4952 Number Transformation 打表规律

点击打开链接 Number Transformation Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 495    Accepted Submission(s): 248 Problem Description Teacher Mai has an integer x. He does the following operation

HDU 4952 Number Transformation 多校8 机智数学

哎.这个题想了好久,状态不对啊...一个大家都出的题..当时想到肯定是可以有什么规律来暴力,不用算到10的10次方 对于某个k,x.从1到k循环,每次求一个新的x,这个x要大于等于原x,并且要是i的倍数... 一直觉得有规律可循,后来知道就是倍数,我们设倍数为 b, 则b2*(i+1)>=b1*(i);可以知道b2>=b1-b1/(i+1),则,b2在b1小于等于i+1的时候便不会再变换,题目最大的倍数为10的10次方,根据第一个式子,最多经过10的五次方,倍数就会缩为10的五次方,此时i也&

HDU 4952 Number Transformation(公式)

HDU Number Transformation 题目链接 题意:按题目中要求求出最后的n 思路:推公式(i+1)x′>=ix,得到x′>=1+floor(xi+1),这样一来就可以递推x,那么注意题目中k很大,但是实际上如果i到一定数值之后,x就不会在增长了,这时候就可以break了 代码: #include <cstdio> #include <cstring> typedef long long ll; ll n, k; int main() { int cas

HDU 4952 Number Transformation 乱搞

题意:给你一个数x,给你K次操作,每一次x变为大于等于 x 且是 i 的倍数的数. 解题思路:可以知道  如果 变化以后  x 是i 和 i+1 的公倍数的倍数的话,那么x的值是不会变的,x  < i * i 的时候,x值肯定会变,每一次增大i(这里后面就可以直接用公式) 所以我们只需要枚举到前面那种情况就可以了. 解题代码: 1 // File Name: 1008.cpp 2 // Author: darkdream 3 // Created Time: 2014年08月14日 星期四 13

HDU-1041-Computer Transformation(规律题 &amp;&amp; 大数题)

Computer Transformation Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 6543    Accepted Submission(s): 2378 Problem Description A sequence consisting of one digit, the number 1 is initially wr

HDU 5422-Rikka with Graph(规律题)

题目地址:HDU 5422 题意: 思路: 如果连上1-n的边,最短距离就是1.所以所有情况下最短距离都是1.考虑方案数,如果本来没有1-n的边,那么只能连1-n,方案数为1.否则怎么连都可以,方案数是n*(n-1)/2. int main() { int n,m; int x,y; while(~scanf("%d %d",&n,&m)) { int flag = 0; for(int i=0; i<m; i++) { scanf("%d %d&quo

HDU 4357 String change 规律题

题意: 给定a串b串,问能否把a变成b串 方法:任选a的2个字母,ascil+=1 然后交换位置,可以操作任意多次. 3个及3个以上一定可以T^T 2个就暴力判一下 #include <cstdio> #include <iostream> #include <algorithm> #include <cstring> using namespace std; const int N = 66; char a[N], b[N]; bool check() {

2014多校联合八(HDU 4945 HDU 4946 HDU 4948 HDU 4950 HDU 4951 HDU 4952)

HDU 4945 2048 题意:给你一堆数字  问有几个子集可以拼出2048 思路: 拼数字的规则相当于让数字乘二  所以不是2^i的数字不会拼出2048  那么这些数可选可不选  即为2^cnt种可能 之后只要计算出有几个子集不可能拼出2048即可  不过简单的直接dp是2048*100000的复杂度的  会TLE 所以要变成先枚举元素  再枚举该种元素个数  再枚举2048种状态  然后利用组合求(组合里需要逆元) 为什么这样快?  因为比如枚举2^5这个元素的时候  最多取2^6个  枚