hdu 4952 Number Transformation (找规律)
题意:给你个x,k次操作,对于第i次操作是:要找个nx,使得nx是>=x的最小值,且能整除i,求k次操作后的数
分析:
经过打表找规律,会发现最后的x/i,这个倍数会趋于一个固定的值,求出这个固定的值和K相乘就可以了,
为什么会趋于固定的值呢,因为最后虽然i在不断增长,但是x也是在增长的,每次的倍数会回退一个发现
有余数,然后再加上一个,所以趋于稳定。
官方题解:
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cstdlib> 5 #include <algorithm> 6 #define LL __int64 7 using namespace std; 8 9 int main() 10 { 11 LL x, k, i, pre, tmp; 12 int ca = 1; 13 while(~scanf("%I64d%I64d", &x, &k)) 14 { 15 if(x==0 && k==0) break; 16 pre = x/1; 17 for(i = 2; i <= k; i++) 18 { 19 tmp = x/i; 20 if(x%i==0) 21 { 22 pre = tmp; 23 continue; 24 } 25 x = (tmp+1)*i; 26 if(pre == tmp+1) // 和之前的相同 27 break; 28 pre = tmp+1; 29 } 30 31 printf("Case #%d: ", ca++); 32 printf("%I64d\n", pre*k); 33 } 34 return 0; 35 }