编写程序求最小正整数m,n(0<n<m)为何值时,1989的m次方与1989的n次方的最后三位数字相同!用C⼀C++

小生是新手,球各位大大指教
2025-02-25 15:52:22
推荐回答(3个)
回答1:

#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     <<"m = "<    cout<<"1989^"<

(注意:即使是使用了unsigned long long类型(C99特有,表示范围:0 -- 2^64-1)最终输出的结果 1989^30,1989^12依然超出了该整数类型的表示范围,所以1989^12与1989^30都是被截断的)

回答2:

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//大体是这样子.......剩下的自己写吧,我懒

}

回答3:

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 if(temp[n]%1000 == temp[m]%1000)return;
++n;
}
temp[m+1]=m_pow(temp[m]);
++m;
}
}