nyoj212-k尾相等数

212-K尾相等数


内存限制:64MB时间限制:3000msSpecial Judge: No

accepted:0submit:0

题目描述:

输入一个自然数K(K>1),如果存在自然数M和N(M>N),使得K^M和K^N均大于等于1000,且他们的末尾三位数相等,则称M和N是一对“K尾相等数”。下面请编程求出M+N最小的K尾相等数。

输入描述:

第一行包含一个正整数T,T<10000,表示有T组数据;
随后有N行,每行包括一个整数K(K<2*10^10);

输出描述:

对于输入的每个整数K,输出对应的M+N的最小值;

样例输入:

1
2

样例输出:

120
 
#include<stdio.h>
#include<string.h>

int main() 
{
	int t,i,j,flag,a[1001];
	long k,sum;

//	freopen("f:\\input.txt","r",stdin);
	scanf("%d%*c",&t);
	while(t--)
	{
		scanf("%ld",&k);
		sum = 1;flag = 0;
		memset(a,0,sizeof(a));
		for(i = 0;sum < 1000;i++)
			sum *= k;
		for(j = 0,sum %= 1000,k %= 1000;j < 1000;j++,i++)
		{
			(a[sum] != 0)?(printf("%d\n",a[sum]+i),flag = 1):(a[sum] = i,sum = sum * k % 1000);
			if(flag == 1)
				break;
		}
	}

	return 0;
}        

posted @ 2018-05-15 15:23  浮生惘语  阅读(114)  评论(0编辑  收藏  举报