编程论坛
注册
登录
编程论坛
→
C++教室
k尾相加
hdt123
发布于 2012-12-24 00:31, 479 次点击
从键盘输入一个自然数K(99999999>K>1),若存在自然数M和N(M>N),使得K的M次方和K的N次方均大于或等于1000,
且它们的未尾三位数相等,则称M和N是一对“K尾相等数”。请编程序,输出K尾相等数中M+N最小值。求大侠解救......
6 回复
#2
rjsp
2012-12-24 08:34
也就是 k^(m-n) % 1000 = 0
其中 k^n >= 1000
但问题是一定有解吗,假如 k=2,则k的任意次方个位数都不可能为0
#3
rjsp
2012-12-24 08:41
我错了,“k^(m-n) % 1000 = 0”这个不对
比如 024*376 = 9024
#4
music1273
2012-12-24 09:51
K^N>1000||K^N==1000&&K^M%1000==K^N%1000
#5
hdt123
2012-12-24 10:22
回复 2楼 rjsp
题目中一也没有要求末尾一定是0!它对末尾是什么没有要求......
#6
rjsp
2012-12-24 10:44
回复 5楼 hdt123
用暴力法写了个,感觉有点烂,所以一开始没贴
程序代码:
#include
<iostream>
unsigned
ktail(
unsigned
k )
{
unsigned
tail[
1000
] = {
0
};
int
n =
1
;
int
kn = k;
for
( ; kn<
1000
; ++n )
kn *= k;
kn %=
1000
;
tail[kn] = n;
k %=
1000
;
int
m = n +
1
;
int
km = (kn*k)%
1000
;
for
( ; tail[km]==
0
; ++m )
{
tail[km] = m;
km = (km*k)%
1000
;
}
std::
cout
<< m <<
'
+
'
<< tail[km] <<
'
=
'
<< m+tail[km] << std::endl;
return
m+tail[km];
}
int
main()
{
ktail(
2
);
return
0
;
}
#7
hdt123
2012-12-24 10:52
回复 6楼 rjsp
貌似得用C++才能编译.....
1