题目链接:点击打开链接
题意:输入n,k,对数字n做k次操作,第i次把n变为大于等于n的i的最小倍数。
数论上来先打表!
打表后发现神奇的规律,当n第一次小于i*i时,后面的n/i都是一个恒定的值,所以只要找到这个i就行了。
坑:i要用long long。
代码:
#include <iostream>
#include <cstdio>
using namespace std;
int main(){
int cas=1;
long long n,k;
while(cin>>n>>k,n||k){
long long t;
long long i;
for(i=2;i<=k;i++){
n=((n+i-1)/i)*i;
if(n<=i*i){
t=n/i;
break;
}
}
if(i<=k)
n=t*k;
printf("Case #%d: %I64d\n",cas++,n);
}
return 0;
}