自守数算法

简介: 自守数算法

算法举例

//自守数算法

例如:

25 ^ 2 = 625   76 ^ 2 = 5776  9376 ^ 2 = 87909376

例如:

376        被乘数
376        乘数
------  ---------
2256      第一个部分积=被乘数*乘数的倒数第一位
2632      第二个部分积=被乘数*乘数的倒数第三位
1125      第三个部分积=被乘数*乘数的倒数第三位
--------
141376

将以上的部分积的后3位求和后截取后3位就是3位数乘积的后3位。


C语言实现

1#include <stdio.h>
 2
 3/*由number的位数确定截取数字进行乘法时的系数k*/
 4#define forech_bit_num(mul,number,k)  \
 5            for(mul=number,k=1;(mul/=10)>0;k*=10) ;
 6//在0~xxxx这些数中寻找自守数
 7#define forech_number(number,num)     \
 8            for(number=0;number<num;number++)
 9//自守数核心算法:(部分积+截取被乘数的后N位*截取乘数的第M位),%kk再截取部分积
10#define automorphic_number(mul,number,k,ll,kk)   \
11        mul=(mul+(number%(k*10))*(number%ll-number%(ll/10)))%kk;
12long print_automorphic_number(long num)
13{
14    long mul,number,k,ll,kk;
15    forech_number(number,num)
16    {
17        forech_bit_num(mul,number,k);
18        kk=k*10;      /*kk为截取部分积时的系数*/
19        mul=0;        /*积的最后n位*/
20        ll=10;        /*ll为截取乘数相应位时的系数*/
21        while(k > 0)
22        {
23            automorphic_number(mul,number , k ,ll ,kk);
24            k/=10;               /*k为截取被乘数时的系数*/
25            ll*=10;
26        }
27         if(number==mul){         /*判断若为自守数则输出*/
28              printf("%ld   ", number);
29         }
30    }
31
32}
33
34int main(void)
35{
36    print_automorphic_number(1000);
37    return 0 ;
38}

运行结果:

640.png

目录
相关文章
|
JavaScript 前端开发
JS 下载 URL 链接文件(点击按钮、点击a标签、支持代理与非代理下载)
JS 下载 URL 链接文件(点击按钮、点击a标签、支持代理与非代理下载)
1130 0
|
Kubernetes 负载均衡 应用服务中间件
【K8S系列】第十三讲:Ingress详解
【K8S系列】第十三讲:Ingress详解
7582 0
|
弹性计算 虚拟化 KVM
Intel Xeon E5-2682 V4 (Broadwell) 2.5 GHz 性能评测 阿里云ECS服务器
Intel Xeon E5-2682 V4 (Broadwell) 2.5 GHz 性能评测 阿里云ECS服务器 阿里云 优 惠 地 址 https://promotion.aliyun.com/ntms/yunparter/invite.html?userCode=q3dtcrrv 阿里云ECS服务器是一种弹性可伸缩的云服务器,通过虚拟化平台将服务器集群虚拟为多个性能可配的虚拟机(KVM),对整个集群系统中所有KVM进行监控和管理,并根据实际资源使用情况灵活 分配和调度资源池。
11545 2
|
小程序 计算机视觉
UNIAPP微信小程序使用Echarts
UNIAPP微信小程序使用Echarts
3149 0
|
关系型数据库 分布式数据库 数据库
【PolarDB 开源】PolarDB 性能调优实录:提升数据库集群吞吐量的技巧
【5月更文挑战第22天】PolarDB 性能调优关键点包括硬件资源配置、数据库参数调整、索引优化、分区策略、事务优化及性能监控。创建高效索引如`CREATE INDEX idx_name ON table_name (column_name);`,根据业务场景选择分区方式,调整事务隔离级别以提升并发性能。监控 CPU、内存等指标,定期维护数据库,结合业务特点综合调优,从而提升数据库集群吞吐量。这些技巧有助于发挥PolarDB潜力,支持业务高效运行。
693 6
|
文字识别 监控 机器人
RPA(Robotic Process Automation)
RPA(Robotic Process Automation)即机器人流程自动化,是一种通过使用软件机器人来自动化业务流程和任务的技术。RPA可以模拟人类的操作行为,通过界面交互、数据处理等方式,自动执行重复性的业务流程和任务,提高工作效率和准确性,降低成本和风险。
1621 0
|
Web App开发 JSON JavaScript
WebGL简易教程(十五):加载gltf模型
WebGL简易教程(十五):加载gltf模型
393 1
|
网络协议 网络安全 数据库
|
域名解析 存储 网络协议
你知道CDN是什么吗?本文带你搞明白CDN
你知道CDN是什么吗?本文带你搞明白CDN
5151 1
|
弹性计算 安全 Linux
阿里云Linux服务器安装宝塔面板详细流程(2023新版教程)
阿里云Linux服务器安装宝塔面板详细流程(2023新版教程),使用阿里云服务器安装宝塔面板教程,阿里云服务器网以CentOS操作系统为例,安装宝塔Linux面板,先远程连接到云服务器,然后执行宝塔面板安装命令,系统会自动安装宝塔面板,安装完成后会返回面板地址、账号和密码。阿里云服务器网来详细说下阿里云服务器安装宝塔面板教程,超简单,一步步跟着操作即可
564 0