Hdu4952 - Number Transformation - 数论(2014 Multi-University Training Contest 8)

来源:互联网 发布:linux grep命令 递归 编辑:程序博客网 时间:2024/06/05 15:28

寻找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);}}


2 0
原创粉丝点击