尾数相等问题
一个自然数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; }