寻找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 ",++cas,sum); } }