http://acm.hdu.edu.cn/showproblem.php?pid=4952
给定x,k,i从1到k,每次a[i]要是i的倍数,并且a[i]大于等于a[i-1],x为a0
递推到下一个a==之前的a即可跳出循环
#include <cstdio> #include <cstdlib> #include <cmath> #include <cstring> #include <string> #include <queue> #include <map> #include <iostream> #include <algorithm> using namespace std; #define RD(x) scanf("%d",&x) #define RD2(x,y) scanf("%I64d%I64d",&x,&y) #define RD3(x,y,z) scanf("%d%d%d",&x,&y,&z) #define clr0(x) memset(x,0,sizeof(x)) typedef long long LL; const int modo = 1e9 + 7; #define eps 1e-9 int main () { int cas = 1; LL n, k; while (~RD2(n,k) && n + k) { LL x = n, a = n; for (LL i = 2; i <= k; i++) { LL tmp = (x - 1) / i + 1; if (tmp == a) break; a = tmp; x = a * i; } printf("Case #%d: %I64d\n", cas++, a * k); } return 0; }