Python算法100例-3.6 自守数

  • 1.问题描述
  • 2.问题分析
  • 3.算法设计
  • 4.求给定数的位数
  • 5.分离给定数中的最后几位
  • 6.确定程序框架
  • 7.完整的程序

1.问题描述

自守数是指一个数的平方的尾数等于该数自身的自然数。例如, 5 2 = 25 , 2 5 2 = 625 , 7 6 2 = 5776 , 937 6 2 = 87909376 5^2=25,25^2=625,76^2=5776,9376^2=87909376 52=25252=625762=577693762=87909376。求100000以内的自守数

2.问题分析

根据自守数的定义,求解本题的关键是知道当前所求自然数的位数,以及该数平方的尾数与被乘数、乘数之间的关系。

3.算法设计

采用“求出一个数的平方后再截取最后相应位数”的方法显然是不可取的,因为计算机无法表示过大的整数。

分析手工方式下整数平方(乘法)的计算过程,以376为例:

在这里插入图片描述

本问题所关心的是积的最后三位。分析产生积的后三位的过程可以看出,在每一次的部分积中,并不是它的每一位都会对积的后三位产生影响。总结规律可以得到,在三位数乘法中,对积的后三位产生影响的部分积分别如下:

·第一个部分积中:被乘数最后三位×乘数的倒数第一位。

·第二个部分积中:被乘数最后两位×乘数的倒数第二位。

·第三个部分积中:被乘数最后一位×乘数的倒数第三位。

将以上部分积的后三位求和后截取后三位就是三位数乘积的后三位。这样的规律可以推广到同样问题的不同位数乘积。

4.求给定数的位数

求一个数的位数可以借助最高位的权值来计算,对于十进制来说,个位的权值为100,十位的权值为101,百位的权值为102,以此类推。一个存储三位数的变量n=123,每次除以10,将得到的值再赋给n,直到n的值为0,最多可以除3次;若变量n中存储的是4位数,用同样的方法去除以10最多可以除4次。可以发现,直到变量变为0,除以10的次数即为当前给定数的位数。程序如下:

# 求给定数的位数if __name__=="__main__":print("请输入一个正整数n:", end="")n = int(input())if n <=0:print("输出错误")exit()count = 0                                       # count存储数的位数while n != 0:n = n // 10count += 1print(" %d 位数" %count)

由于本题在下面的编程过程中还要用到原数number,故在求位数的程序段中为保证number值不被破坏,暂时将number的值赋给另一变量mul,即mul=number,由mul代替number去执行相应的操作。对应程序段如下:

mul = number
k = 1
while (mul // 10) > 0:                       # 由number的位数确定截取数字进行乘法时的系数kmul //= 10k *= 10

5.分离给定数中的最后几位

从一个两位数(存在变量n中)开始分析,分离最低位个位:n%10;对于三位数n,分离最后两位:n%100;对于四位数n,分离最后三位:n%1000;以此类推,若分离出最后x位,只需要用原数对10x求余。

从算法设计部分所举例子可以看出,对于第二个部分积“2632”来说其实应该是“26320”,因为对于乘数中的倒数第二位“7”来说,因其在十位,对应的权值为10,第二个部分积实质上为376×70=26 320。故求部分积的程序段为:

while k > 0:# (部分积+截取被乘数的后N位×截取乘数的第M位),%a再截取部分积mul = (mul + (number % (k * 10))*(number % b - number % (b //  10)))%ak //= 10                                # k为截取被乘数时的系数b *= 10

对于整个循环来说,变量k是由number的位数确定截取数字进行乘法时的系数。第一次执行循环体时,被乘数的所有位数都影响到平方的尾数,故第一个部分的积等于被乘数×乘数的最后一位,将部分积累加到变量mul上,再对a取余截取相应的尾数位数;第二次执行循环体,影响平方尾数的是被乘数中除了最高位之外的数(故k先除以10再参加运算),第二个部分的积等于被乘数×乘数的倒数第二位,(number%b-number%(b//10))用来求乘数中影响平方尾数的对应位上的数;第三次、第四次执行循环体的过程同上。

6.确定程序框架

该程序的简略流程图如图所示。

在这里插入图片描述

7.完整的程序

%%time
#  自守数if __name__=="__main__":print("100000以内的自守数:")for number in range(0, 100000):mul = numberk = 1while (mul // 10) > 0:   # 由number的位数确定截取数字进行乘法时的系数kmul //= 10k *= 10a = k * 10  # a为截取部分积时的系数mul = 0 # 积的最后n位b = 10  # b为截取乘数相应位时的系数while k > 0:# (部分积+截取被乘数的后N位*截取乘数的第M位),%a再截取部分积mul = (mul + (number % (k * 10))*(number % b - number % (b //  10)))%ak //= 10  # k为截取被乘数时的系数b *= 10if number == mul:  # 判定若为自守数则输出print("%ld " %number, end="\t")print('\n')
100000以内的自守数:
0 	1 	5 	6 	25 	76 	376 	625 	9376 	90625 	CPU times: user 536 ms, sys: 2.14 ms, total: 539 ms
Wall time: 535 ms

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/726710.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java基础-锁之volatilesynchronized

文章目录 volatilevolatile内存语义volatile的可见性volatile无法保证原子性volatile禁止重排优化硬件层的内存屏障volatile内存语义的实现下面是基于保守策略的JMM内存屏障插入策略。下面是保守策略下&#xff0c;volatile写插入内存屏障后生成的指令序列示意图下图是在保守策…

Android APP性能指标(二)

文章目录 一、响应时间1.1 数据获取1.2 响应时间指标测试点1.3 启动速度测试点1.4 响应时间测试解决方法 二、流量2.1 数据获取2.2 流量测试关注点2.3 测试标准 三、电量3.1 连接手机3.2 数据获取3.3 获取APP的UID3.3 重置电池数据收集数据3.4 电量指标测试 四、温度五、性能测…

打包系统待优化点

Base.Widget.AppCompat.ActivityChooserView中相关资源重复 D:\channelPackage\ToolConfigPath\games\dcpPro\100081\mumu\tempRes\values\attrs.xml:1171: error: duplicate value for resource attr/displayOptions with config . D:\channelPackage\ToolConfigPath\games\d…

【C++精简版回顾】19.异常处理

1.throw抛出问题 int print(int a,int b) {if (b 0)throw b;return a / b; } 2.try与catch解决问题 try {print(2, 0); } catch (int b) {cout << "竟然是&#xff1a;"<<b<<endl; } 结果&#xff1a; 补充1&#xff1a;可以抛出字符串等 1.throw…

day13_微服务监控Nginx(微服务集成SBA)

文章目录 1 微服务系统监控1.1 监控系统的意义1.2 SBA监控方案1.3 SBA实战1.3.1 创建SBA服务端1.3.2 微服务集成SBA 1.4 微服务集成logback1.5 配置邮件告警 2 Nginx2.1 Nginx简介2.2 下载和安装2.2.1 方式1&#xff1a;window本地安装2.2.1.1 下载2.2.1.2 安装2.2.1.3 目录结构…

关于 typeof 与 instanceof 区别引出的原型对象问题

一、关于 typeof 与 instanceof 区别&#xff1a; typeof 和 instanceof 是 JavaScript 中用于检查变量类型的两个不同操作符&#xff0c;它们在使用上有着明显的区别和不同的适用场景。 typeof typeof 是一个一元操作符&#xff0c;用于返回一个变量或表达式的数据类型的字符…

简单认识算法

什么是算法&#xff1f; 解决某个实际问题的过程和方法。 排序算法 1.冒泡排序 打印结果&#xff1a; 2.选择排序 打印结果&#xff1a; 优化选择排序&#xff1a;因为每一轮都需要以当前位置为基准与后面元素比较&#xff0c;太过繁琐&#xff0c;所以可以找到后面元素中较小…

Long使用==

1、背景&#xff1a;测试程序的时候发生了没数据的bug,于是在sevice层的一堆代码中调试&#xff0c;最后发现问题是在stream的filter方法中对两个Long使用造成的问题。 2、测试代码&#xff1a; Long a Long.valueOf(340);Long b Long.valueOf(340);System.out.println(a b)…

指针的学习4

目录 回调函数 qsort使用样例 使用qsort函数排序整形数据 使用qsort函数排序结构体 回调函数 回调函数就是一个通过函数指针调用的函数。如果把函数的指针&#xff08;地址&#xff09;作为参数传递给另一个函数&#xff0c;当这个指针被用来调用其所指向的函数时&#xf…

想打造爆款AI应用?ai虚拟数字人制作助你一臂之力

如今&#xff0c;随着人工智能技术的飞速发展&#xff0c;AI应用已经渗透到我们生活的方方面面。而在这个充满竞争和创新的时代&#xff0c;不少企业都在努力寻找打造爆款AI应用的机会。其中&#xff0c;AI虚拟数字人制作可以为他们提供一臂之力。 AI虚拟数字人制作是指利用人…

六氟化硫SF6气体怎么监测泄漏?

在当今的电力工程领域中,六氟化硫是一种应用广泛的电负性气体,从它发明至今已有百年历史。六氟化硫耐电强度为同一压力下氮气的2.5倍,击穿电压是空气的2.5倍,灭弧能力是空气的100倍,是一种优于空气和油之间的新-代超高压绝缘介质材料。 六氟化硫以其良好的绝缘性能和灭弧性能,在…

解决ts报错:类型“entry”上不存在属性“$AppTools”

uniapp ts 项目&#xff0c;已经将AppTools挂在了vue的原型上&#xff0c;但是在vue页面使用时报错&#xff0c;如图&#xff1a; 解决&#xff1a; 在项目根目录下的tsconfig.json文件添加如下配置&#xff1a; "include": ["src/**/*"],这样报错就消失…

使用移动云短信服务发送普通短信与模板短信

今天使用到了用移动云短信服务发送短信功能,顺便记录下 apid,secretKey和集团名称分别为如下图用户名,密码,所属分组 package com.keyou.proj.authentication.service.utils;import cn.hutool.crypto.SecureUtil; import cn.hutool.http.HttpRequest; import cn.hutool.json.J…

Vue.js+SpringBoot开发天然气工程业务管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、使用角色3.1 施工人员3.2 管理员 四、数据库设计4.1 用户表4.2 分公司表4.3 角色表4.4 数据字典表4.5 工程项目表4.6 使用材料表4.7 使用材料领用表4.8 整体E-R图 五、系统展示六、核心代码6.1 查询工程项目6.2 工程物资…

JuiceSSH结合Cpolar实现公网远程SSH访问内网Linux系统

文章目录 1. Linux安装cpolar2. 创建公网SSH连接地址3. JuiceSSH公网远程连接4. 固定连接SSH公网地址5. SSH固定地址连接测试 处于内网的虚拟机如何被外网访问呢?如何手机就能访问虚拟机呢? cpolarJuiceSSH 实现手机端远程连接Linux虚拟机(内网穿透,手机端连接Linux虚拟机) …

【Python】新手入门(8):什么是迭代?迭代的作用是什么?

【Python】新手入门&#xff08;8&#xff09;&#xff1a;什么是迭代&#xff1f;迭代有什么应用&#xff1f; &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】…

SpringBoot集成ElasticSearch(ES)

ElasticSearch环境搭建 采用docker-compose搭建&#xff0c;具体配置如下&#xff1a; version: 3# 网桥es -> 方便相互通讯 networks:es:services:elasticsearch:image: registry.cn-hangzhou.aliyuncs.com/zhengqing/elasticsearch:7.14.1 # 原镜像elasticsearch:7.…

基于Mindspore,通过Resnet50迁移学习实现猫十二分类

使用平台介绍 使用平台&#xff1a;启智AI协作平台 使用数据集&#xff1a;百度猫十二分类 数据集介绍 有cat_12_train和cat_12_test和train_list.txt train_list.txt内有每张图片所对应的标签 Minspore部分操作科普 数据集加载 Mindspore加载图片数据集就直接调整成这种…

什么?!你居然连个内存泄漏都排查不出来

公众号&#xff1a;程序员白特&#xff0c;欢迎一起交流学习~ 在日常的业务开发中&#xff0c;偶尔会出现内存泄漏的情况&#xff0c;那么我们该怎么排查呢&#xff1f;现在跟着文章一起学习下吧~ 使用Chrome devTools查看内存情况 打开Chrome的无痕模式&#xff0c;以屏蔽Ch…

k个一组反转链表

题目 题目链接 . - 力扣&#xff08;LeetCode&#xff09; 题目描述 代码实现 class Solution { public:ListNode* reverseKGroup(ListNode* head, int k) {if(k 1) return head;//特殊情况ListNode *cur head;for(int i 1; i < k; i){if(cur nullptr ||cur->nex…