尾数相等问题
一个自然数K(2≤K),若存在自然数M和N(M大于N),使得K^M和K^N均大于或等于1000,且它们的末尾三位数相等,则称M和N是一对“K尾相等数”。 输入包含若干个测试用例,每个测试用例占一行,为一个自然数K
用一行输出符合要求的最小M+N值
求大神给点较优算法,c++
程序代码:#include <stdio.h>
unsigned foo( unsigned k )
{
unsigned mark[1000] = { 0 };
unsigned i = 1;
unsigned v = k;
for( ; v<1000; ++i, v*=k );
k %= 1000;
v %= 1000;
for( ; mark[v]==0; ++i, v=(v*k)%1000 )
mark[v] = i;
return mark[v] + i;
}
#include <assert.h>
int main()
{
assert( foo(2) == 120 );
assert( foo(25) == 7 );
assert( foo(125) == 6 );
assert( foo(1000) == 3 );
assert( foo(1234) == 56 );
assert( foo(111111) == 52 );
assert( foo(1000003) == 102 );
assert( foo(123454321) == 27 );
return 0;
}