1076 K尾相等数

时间:2023-03-10 00:04:29
1076 K尾相等数

时间限制:500MS  内存限制:65536K
提交次数:251 通过次数:80

题型: 编程题   语言: C++;C

Description

从键盘输入一个自然数K(99999999>K>1),若存在自然数M和N(M>N),使得K的M次方和K的N次方均大于或等于1000,
且它们的未尾三位数相等,则称M和N是一对“K尾相等数”。请编程序,输出K尾相等数中M+N最小值。

输入样例

2

输出样例

120
#include<cstdio>
#include<cstring>
int powermod(int a,int b)
{
int ans=;
a=a%;
if(!a) return ;
while(b)
{
if(b%==)
ans=ans*a%;
a=a*a%;
b/=;
}
return ans; }
int main()
{
int res;
int i,j=,t,k,p;
int a[];
int leap=;
scanf("%d",&k);
//下面的if else 语句,当k为对应值时,恰好其p次方超过一千
if(k==) p=;
else if(k==) p=;
else if(k==||k==) p=;
else if(k==||k==||k==||k==||k==)
p=;
else if(k>=&&k<=) p=;
else if(k>=&&k<=) p=;
else p=; for(i=p; i<=; i++)
{
res=powermod(k,i);
a[j++]=res;
//下面for循环用于判断之前有没有出现和这次求得的a[j-1]相同的值
for(t=; t<j-; t++)
if(a[j-]==a[t])
{ leap=;
break;
}
if(leap) break; }
//数组的下标从0开始,而代表幂的循环从p开始
printf("%d\n",(j-+p)+(t+p));
return ;
}