第一至第九题除了用程序去解都没什么办法去解的,当然在求解前确定某些情况符合条件会减少程序的计算时间。 第十题实际上是求10对模2003的次数,初等数论上已经有很成熟的方法了。 欧拉函数φ(n):欧拉函数是一个定义在正整数上的函数,φ(n)的值等于以下这些整数0、1、2、…、n-1与n互素的数的个数。 由定义知,φ(1)=1,φ(2)=1,φ(3)=2,φ(4)=2,……,当p是素数时,φ(p)=p-1。 欧拉函数的计算方法:设n的标准分解式子是p1^k1·p2^k2·…·pm^km,其中p1、p2、…、pm是互不相等的素数,k1、k2、…、km都是正整数,则φ(n)=n(1-1/p1)(1-1/p2)…(1-1/pm)。 例如φ(10)=10×(1-1/2)×(1-1/5)=4。 欧拉定理:设a、m为整数,m>1,(a,m)=1,则a^φ(m)≡1 (mod m)。 整数的次数:a、m为整数,m>1,(a,m)=1,k是使a^k≡1 (mod m)成立的最小正整数,则k叫做a对模m的次数。 次数定理:设a对模m的次数为k,n是满足a^n≡1 (mod m)的正整数,则k|n。 例如 2003是素数,所以问题等价于求10^n≡1 (mod 2003)能被2003整除的最小正整数n,φ(2003)=2002=2×7×11×13,由欧拉定理知10^2002≡1 (mod 2003),因此所求的正整数就是2002的正因数,只需要尝试有限个就得到所求的n是1001。 虽然这个方法可行,但因数多时仍需要做很多的验证,需要有更有效的改进方法。 假设a、n是大于1的正整数,p是素数,则a对模p的次数没有什么好办法去求,只能用上面的方法。 其它情形有下面两个定理: 假设a、n是大于1的正整数,n的标准分解式是p1^k1·p2^k2·…·pt^kt,其中p1、p2、…、pt是互不相等的素数,k1、k2、…、kt都是正整数,a对模pi^ki的次数为mi,则a对模n的次数为m1、m2、…、mt的最小公倍数。 如果a、n是大于1的正整数,p是素数,k是正整数,a对模p^k的次数是m,则a对模p^(k+1)的次数是m或pm。 例如 2007=3^2×223,问题等价于求10^n≡1 (mod 18063)能被2003整除的最小正整数n。18063=3^4×223。10对模3的次数1;因此10对模9的次数是1或3,经检验得10对模9的次数是1;因此10对模27的次数是1或3,经检验得10对模27的次数是3;因此10对模81的次数是3或9,经检验得10对模81的次数是9。10对模223的次数是222。因此所求的n就是9和222的最小公倍数,即666。 相信利用上面的方法,你已经知道对qjchen提出的2009的情形怎样计算了。 |