的确可以找到任意多位连号的1
因为我没学过数论,所以就直接暴力归纳,大力出奇迹。
以下按照计算机的习惯,记%为取余符号
由于现在不在家,手机码字,如果要详细证明,请等我回家。反正这些也不难证明,读者大可自行尝试
71^250 % 10^4 == 1,且71^m % 10^4 ≠ 1(m小于250)
71^250 % 10^5 == 30001
引理1可以证,但没有必要。暴力验证它不香吗?下面是C++代码。
#include <iostream>
using namespace std;
// (a^b)%c
int modpow(int a,int b,int c)
{
int i,temp=a%c;
for(i=1;i<b;i++)
{
temp*=a;
temp%=c;
}
return temp;
}
int main(){
int i=1;
for(i=1;i<=250;i++)
{
if(modpow(71,i,10000)==1)
cout<<i<<endl;
}
return 0;
}
由数学归纳法:
71^(25*10^m) % 10^(3+m) == 1
71^(25*10^m) % 10^(4+m) == 1+3*10^(3+m)
数学归纳法+二项式定理证明引理2是容易的,读者大可自行尝试。
事实上,引理2就保证了这的确是对的了。引理2表明:幂增加25*10^m不会改变后m+3位,加上第m+4是奇数,所以成立。
如果哪些地方要详细证明,请等我回家后再说,现在在外面吃饭,一没时间,二没电脑。