HDU 4952 Number Transformation (找规律)

2015-07-20 17:54:31 · 作者: · 浏览: 5

?

进行K次操作,第i次操作是把X变成不小于X的最大整数,并且X是i的倍数。经过K次操作后就X的值。

红果果的暴力是会超时的。暴力打表发现在12000之后出现规律。之后的两两之间差恒定了。

?

?

?

AC代码:

?

?

#include
  
   
#define ll __int64
const ll maxn=120000;

int main()
{
	ll i;
	ll x,k;
	int cas=1;
	while(scanf(%I64d %I64d,&x,&k)!=EOF)
	{
		if(x==0 && k==0)
			break;
		printf(Case #%d: ,cas++);
		if(k<=maxn)
		{
			for(i=1;i<=k;i++)
				if(x%i!=0) x=i*(x/i+1);
			printf(%I64d
,x);
		}
		else
		{
			ll y;
			for(i=1;i<=maxn;i++)
				if(x%i!=0) x=i*(x/i+1);
			y=i*(x/i+1);
			printf(%I64d
,x+(k-maxn)*(y-x));
		}
	}

	return 0;
}
  


?

?