所有栏目

自守数

作者:爱百科

自守数,亦称同构数,是指一个数的平方的尾数等于该数自身的自然数。在十进制中,0, 1, 5, 6, 25, 76, 376, 625, 9376, 90625, 109376, 890625, 2890625, 7109376, 12890625, 87109376, 212890625, 787109376, 1787109376, ... 都是自守数。

自守数介绍

自守数,亦称同构数,是指一个数的平方的尾数等于该数自身的自然数。在十进制中,0, 1, 5, 6, 25, 76, 376, 625, 9376, 90625, 109376, 890625, 2890625, 7109376, 12890625, 87109376, 212890625, 787109376, 1787109376, ... 都是自守数。

自守数简介

定义:自然数

称为

-进制下的自守数当且仅当

能被

整除,其中

. 取

时即为此自守数的定义。

的平方的个位数仍然是

和(对任何

进制),称为平凡自守数。

注意:当

为素数时,只有平凡自守数。

显然,

是一位自守数(

,所以

是两位自守数。

自守数有一个特性,以他为后几位的两个数相乘,乘积的后几位仍是这个自守数。因为5是自守数,所以以

为个位数的两个数相乘,乘积的个位仍然是

是自守数,所以以

为后两位数的两个数相乘,其结果的后两位仍是

,如

三位自守数是

,四位自守数是

,五位自守数是

......

我们可以看到,

位的自守数出自

位的自守数。由此得出,如果知道

位的自守数

,那么

位的自守数应当由

前面加上一个数构成。(仅对

的素因子个数为

时适用)

实际上,简化一下,还能发现如下规律:

......

定理(自守数的对称性):设

为非平凡自守数,

为最小的使得

的数,则

是自守数

证明:观察易发现,因为

,则

,我们取模

的同余,有

,最后一个同余号成立是因为

为自守数

注记:其实对于平凡情形,这个定理也成立,如是自守数,则

也是自守数。

定理:设

的不同的素因子个数为

,则大于

小于

的自守数的个数为

推论,

时,

位数的自守数有且只有两个,二者它们的和等于

所以,两个

位自守数,他们的和等于

.

自守数编程计算

自守数JAVA

实现:

public class ZishouNumber {    public static void main(String args) {        for(int i = 1; i < 10000; i++){            String strI = String.valueOf(i);            String multiStr = String.valueOf(i*i);            String last = multiStr.substring(multiStr.length() - strI.length());            if(last.equals(strI)){                System.out.println(i + "*" + i + "=" + multiStr + "--> " + i + " is Zishoushu");            }        }    }}

--------------------------

1*1=1--> 1 is Zishoushu5*5=25--> 5 is Zishoushu6*6=36--> 6 is Zishoushu25*25=625--> 25 is Zishoushu76*76=5776--> 76 is Zishoushu376*376=141376--> 376 is Zishoushu625*625=390625--> 625 is Zishoushu9376*9376=87909376--> 9376 is Zishoushu

自守数c++的实现

#include<iostream.h>class Self{    private:    int a;    int m,n,p;    public:    Self(int _m,int _n)    {        m=_m;n=_n;    }    void process()    {        int pf;        int j=0;        p=0;        for(int i=m;i<=n;i++)        {            int k=i;            pf=k*k;            while(k!=0)            {                if((pf%10)!=(k%10))break;                k=k/10;                pf=pf/10;            }            if(k==0)            {                a=i;                p++;                j++;            }        }    }    void print()    {        cout<<"自守数的个数为:"<<p<<endl;        for(int j=0;j<p;j++)            cout<<a<<'t';        cout<<endl;    }};void main(){    Self test(1,110);    test.process();    test.print();}

自守数Python的实现

while True:try:    n=int(input())    for i in range(1+n):    if str(i)==str(i**2):        print(str(i))    except:    break    

热点导航
教育资讯 知道问答 公考资讯 司法考试 建筑知识 工作范文 大学排名 报考专业 学习方法 句子美文 秒知回答 作业解答 精选答案 知途问学