首页 > 其他分享 >自守数

自守数

时间:2023-05-22 22:47:12浏览次数:31  
标签:10 自守数 三位 被乘数 mul 乘数

一、问题描述

  自守数是指一个数的平方的尾数等于该数自身的自然数,如25*25=625,76*76=5776.要求求出一定范围内的所有自守数。求100000以内的自守数

二、设计思路

若采用“求出一个数的平方后再截取最后相应位数”的方法显然是不可取的,因为计算机无法表示过大的整数。
分析手工方式下整数平方(乘法)的计算过程,以376为例:
376 被乘数
X 376 乘数
----------
2256 第一个部分积=被乘数*乘数的倒数第一位
2632 第二个部分积=被乘数*乘数的倒数第二位
1128 第三个部分积=被乘数*乘数的倒数第三位
----------
141376 积
本问题所关心的是积的最后三位。分析产生积的后三位的过程,可以看出,在每一次的部分积中,并不是它的每一位都会对积的后三位产生影响。总结规律可以得到:在三位数乘法中,对积的后三位产生影响的部分积分别为:
第一个部分积中:被乘数最后三位*乘数的倒数第一位
第二个部分积中:被乘数最后二位*乘数的倒数第二位
第三个部分积中:被乘数最后一位*乘数的倒数第三位
将以上的部分积的后三位求和后截取后三位就是三位数乘积的后三位。这样的规律可以推广到同样问题的不同位数乘积。
按照手工计算的过程可以设计算法编写程序。

三、程序流程图

 

四、代码实现

#include<stdio.h>
void main()
{
long mul,number,k,a,b;
printf("It exists following automorphic nmbers small than 100000:\n");
for (number=0;number<100000;nimber++)
{
for(mul=number,k=1;(mul/=10)>0;k*=10);
a=k*10;
mul=0;
b=10;
while(k>0)
{
mul=(mul+(number%(k*10))*(number%b-number%(b/10)))%a;
k/=10;
b*=10;
}
if(number==mul)
printf("%1d   ",number);
}
printf("\n");
}

 

标签:10,自守数,三位,被乘数,mul,乘数
From: https://www.cnblogs.com/tianpeisen/p/17421975.html

相关文章

  • 自守数
    #define_CRT_SECURE_NO_WARNINGS#include<stdio.h>main(){ longi,j; for(i=0;i<=10000;i++) { for(j=10;;j*=10) if(i%j==i)break; if((i*i)%j==i)printf("%ld",i); }}......
  • 24.自守数
     #include<cstdio>usingnamespacestd;boolt(intn){ ints=n*n,x=1; while(x<n) x=x*10; returns%x==n;}longlonga,b;intmain(){ scanf("%lld%lld",&a,&b); printf("1\n"); for(longlongi=a;i<=b;i++) { if(i!=1&&a......
  • 3.3自守数
    3.3自守数1.问题描述自守数是指一个数的平方的尾数等于该数自身的自然数。#include <stdio.h>#include <stdlib.h> int main(){    int temp=0;    long long sum=0,data=0,index=1;    for(long long i=0;i<=200000;i++)    {        sum=i*i;......
  • 自守数
    一问题描述自守数i的平方为z,z的尾数等于那个i。二设计思路先求出i的位数再将i*i取余10的位数次方。三程序流程图四伪代码实现//自守数#include<bits/stdc++.h>usingnamespacestd;intmain(){ intn=100000; for(inti=0;i<=n;i++) { intx=i*i; intt=i; intc=1; fo......
  • 自守数
    自守数是指一个数的平方的尾数等于该数自身的自然数。例如:5^2=25    25^2=625   76^2=5776   9376^2=87909376求100000以内的自守数。通过规律我们以可得出个位数的平方只需对10求余则可判断是否为自守数,十位数则对100求余,百位数则对1000求余,以此类推便可......
  • 自守数
    一、问题描述自守数是指一个数的平方的尾数等于该数自身的自然数。例如:52=25  252=625 762=5776 93762=87909376求100000以内的自守数。二、设计思路   从1循环到100000,找到它们尾数的平方,与数本身作对比,如果等于就是自守数三、流程图 四、伪代码For(10000......
  • 自守数
    一问题描述自守数i的平方为z,z的尾数等于那个i。二设计思路先求出i的位数再将i*i取余10的位数次方。三程序流程图 四伪代码实现#include<iostream>#include<math.h>usingnamespacestd;intmain(){ intj,z,x; for(inti=0;i<=10000;i++){ intj=1; intm; m=i; fo......
  • 自守数
    自然语言解决问题:根据自守数的定义,求解本题的关键是知道当前所求自然数的位数,以及该数平方的尾数与被乘数、乘数之间的关系流程图: 具体代码:#include<stdio.h>intmain(){longmul,number,k,a,b;printf("Itexistsfollowingautomorphicnmberssmallthan100000:\n");for......
  • 自守数
    自守数:自守数是指一个数的平方的尾数等于该数自身的自然数。例如:5²=25  25²=625  76²=5776  9376²=87909376求10000以内的自守数。解题思路:for循环遍历1~10000,内层for循环求出number的位数,给y赋值number的平方取余10的number位数的平方,条件判断y与number是否相......
  • PAT Basic 1091. N-自守数
    PATBasic1091.N-自守数1.题目描述:如果某个数\(K\)的平方乘以\(N\)以后,结果的末尾几位数等于\(K\),那么就称这个数为“\(N\)-自守数”。例如\(3×92^2=25392\),而\(25392\)的末尾两位正好是\(92\),所以\(92\)是一个\(3\)-自守数。本题就请你编写程序判断一个给定的......