题意:给出一个数x,求k次操作后的xk。第i次操作指找到一个xi,xi不小于xi−1且为i的倍数。
思路:对于xi,x′(i+1)>=xi,所以x′>=x−[x/(i+1)]
所以当x<i+1时,x值就不会改变了,所以我们只要枚举到x小于i+1就行了。
#include<cstdio>
#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
typedef __int64 LL;
LL x, k;
int main(){
L x, k;
int t = 1;
while (cin >> x >> k && x){
LL d;
d = x;
for (int i = 2; i <= k; i++){
d = d - d / i;
if (d < i)
break;
}
printf("Case #%d: %I64d\n", t++, k * d);
}
return 0;
}