寻找1~k内i的倍数,则这个数可以看成i*x,则下一个数为(i+1)*y,(i+1)*y>=i*x,那么可以推出,y=x-x/(i+1);
那么当x<i+1时,y==x,之后的循环也不会改变,就可以跳出。
#include<stdio.h>
__int64 x,y,k;
int main()
{
__int64 i;
int flag;
__int64 sum;
int cas=0;
while(scanf("%I64d%I64d",&x,&k)!=EOF)
{
sum=x;
flag=0;
if(x==0&&k==0)
{
break;
}
for(i=1;i<k;i++)
{
y=x-x/(i+1);
if(x==y)
{
sum=x*k;
break;
}
x=y;
sum=x*k;
}
printf("Case #%d: %I64d\n",++cas,sum);
}
}