#include
#include
using namespace std;
unsigned long long int power(int x, int y); //计算x的y次幂
int main(void)
{
bool found = false; //是否找到满足题意的最小整数m,n的标志符
for(int m=2;!found;m++)
for(int n=1;n
unsigned long long int a = power(1989,m),b=power(1989,n);
if((a - (a/10)*10) == (b - (b/10)*10) //个位相同
&& (a/10 - (a/100)*10) == (b/10 - (b/100)*10) //十位相同
&& (a/100 - (a/1000)*10) == (b/100 - (b/1000)*10)) //百位相同
{
cout<<"满足1989的m次方与1989的n次方的最后三位数字相同的最小正整数m,n(0
break;
}
}
return 0;
}
unsigned long long int power(int x, int y) //计算x的y次幂
{
assert(x >0 && y>=0);//对参数的合法性进行判断
unsigned long long ans = 1;
for(int i=1;i<=y;i++)
ans = ans*x;
return ans;
}
运行结果如下:
(注意:即使是使用了unsigned long long类型(C99特有,表示范围:0 -- 2^64-1)最终输出的结果 1989^30,1989^12依然超出了该整数类型的表示范围,所以1989^12与1989^30都是被截断的)
flag=0;//标识位,找到了设成1,没找到为0
for(m=0;flag!=1;m++)
for(n=0;n
{
if((pow(1989,m))%1000==(pow(1989,n))%1000)//有个问题,m,n只能用float及以下的了
flag=1;
printf//大体是这样子.......剩下的自己写吧,我懒
}
inline unsigned int m_pow(unsigned int t){
return (989*t)&0x3ff;
}
void fun(int& n,int &m){
n=1;
m=2;
unsigned int temp[1009];
temp[1]=989;
temp[2]=m_pow(989);
temp[3]=m_pow(temp[1]);
while(m<1009){
n=1;
while(n
++n;
}
temp[m+1]=m_pow(temp[m]);
++m;
}
}