注册 登录
编程论坛 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
rjsp2012-12-24 08:34
也就是 k^(m-n) % 1000 = 0
其中 k^n >= 1000

但问题是一定有解吗,假如 k=2,则k的任意次方个位数都不可能为0
#3
rjsp2012-12-24 08:41
我错了,“k^(m-n) % 1000 = 0”这个不对
比如 024*376 = 9024
#4
music12732012-12-24 09:51
K^N>1000||K^N==1000&&K^M%1000==K^N%1000
#5
hdt1232012-12-24 10:22
回复 2楼 rjsp
题目中一也没有要求末尾一定是0!它对末尾是什么没有要求......
#6
rjsp2012-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
hdt1232012-12-24 10:52
回复 6楼 rjsp
貌似得用C++才能编译.....
1