当前位置:首页 科普知识 自守数

自守数

发布时间:2023-09-15 00:59:37

自守数,亦称同构数,是指一个数的平方的尾数等于该数自身的自然数。在十进制中,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    

温馨提示:
本文【自守数】由作者 爱百科 转载提供。 该文观点仅代表作者本人, 自学教育网 信息发布平台,仅提供信息存储空间服务, 若存在侵权问题,请及时联系管理员或作者进行删除。
(c)2008-2025 自学教育网 All Rights Reserved 汕头市灵创科技有限公司
粤ICP备2024240640号-6