matlab的雷劈数算法,寻找雷劈数
戴公子预初,看到个故事:
有位数学家卡普利加在一次旅行中,遇到猛烈的暴风雨,电闪雷鸣过后,他看到路边一块里程碑,被雷电劈成两半,一半上刻著30,另一半刻著25。这时,卡普利加的脑际中忽然发现了一个绝妙的数学关系——把劈成两半的数加起来,再平方,正好是原来的数位。除此之外,还有没有别的数,也具有这样的性质呢?
熟悉速算的人很快就找到了另一个数:2025 按照第一个发现者的名字,这种怪数被命名为“卡普利加数”,又称“雷劈数”。
据说这样的书有无穷多个,怎么找到他们呢?
----------------------------------------------------------------------------------------------->
首先想到的是excel,用row()^2,用Log找到结果是偶数位的行,对半拆开,相加平方后比较,轻松找到十来个五位数以内的对劈的雷劈数。
不过,戴公子发现在excel中公式拖到底运算量太大电脑差点死机,总共能算出几十个,再多用excel就不行了。
到此为止已经可以证明有无穷多个雷劈数了:N个9,接一个8,接N个0,再接一个1,肯定是是N+1个9的平方。
如果包含非对劈的,1后面接偶数个0的都是。
其实也不是excel不行,算法得改进,不过要更好解决,还是交给python吧。
---------------------------------------------------------------------------------------------->
import math
for n in range(1,9):
L=pow(10,n-1)
H=pow(10,n)
for a in range(L,H):
if a%10 in [0,4,5,8]: #加014569后还是完全平方的数肯定以0458结尾
for b in range(1,H):
if b%10 in [0,1,4,5,6,9]: # 完全平方数肯定以0124569结尾
if pow(a+b,2)==a*pow(10,n)+b:
print(a,b,a*pow(10,n)+b)
转啊转算出十来个,好像比较慢诶......
作为解释型语言,python确实比较慢,不过...我们有numba!
---------------------------------------------------------------------------------------------->
from numba import jit
import math
@jit(nopython=True,fastmath = True )
def dai():
for n in range(1,18):
L=pow(10,n-1)
H=pow(10,n)
for aa in range(L,H,10):
for k in [0,4,8]: #简单分析可知a肯定是048结尾,运算量一下子少了70%
a=aa+k
rootp=math.sqrt(H)
Lb=int(math.sqrt(a)*rootp)-a #关键优化2,只需遍历几个可能的b
Hb=int(math.sqrt(a+1)*rootp)-a+1
for b in range(Lb,Hb):
t1=b%100 #b的结尾只有几种可能性,运算量再减少近八成
t2=pow(a%100 + t1,2)%100 #同余
if t1==t2 and (t1 in [1,4,9,16,25,36,49,64,81,0,21,44,69,96,56,89,24,61,41,84,29,76]):
if pow(a+b,2)==a*H+b:
m=int(n-math.log10(b+1)) #补0,优化输出格式
print('a=',a,'\t\tb=',b,'\ta+b=',a+b,'\t\tab=',a,'0'*m,b)
if __name__ == '__main__':
dai()
结果是竹筒倒豆子,噼里啪啦输出一大堆,速度提高100倍都不止
网上查了一圈,好多种不同编程语言都有找雷劈数的代码,但基本上都是通过第一种算法,找到万亿级后速度就很慢了。
利用python的无限制长整型找雷劈数,再用numba优化编译成机器码加速,轻松找到亿亿亿级雷劈数。
补充:本来想用取模平方再取模的同余算法优化判断长整型平方效率,debug过程中发现,jit后对大整数会溢出,好在平方和ab同样溢出,不影响等值判断,但没法用同余算法优化。
睡一觉起来,笔记本i7-6700HQ已经得到了200来个对劈数,最大的是这个28位数,约3809亿亿亿:
ab= 38098433988110 23625494911556
matlab的雷劈数算法,寻找雷劈数相关推荐
- C#分页的总页数算法
.Net中通用分页页数计算方式,分页的总页数算法 总记录数:totalRecord 每页最大记录数:maxResult 算法一: totalPage = totalRecord % maxResul ...
- JzxxOJ Problem 4209: 寻找雷劈数 题解
4209: 寻找雷劈数 题解 这是OJ的一道题,主要考验了数字的拆分,比较简单的! 题目 Code #include<iostream> #include<cstdio> #i ...
- 寻找雷劈数c语言,求雷劈数的来历。
雷劈数 有位外国数学家叫卡普利加,在一次旅行中,遇到猛烈的暴风雨,电闪雷鸣过后,他看到路边一块里程碑,被雷电劈成两半,一半上刻著30,另一半刻著25.这时,卡普利加的脑际中忽然发现了一个绝妙的数学关系 ...
- 寻找雷劈数(C实现)
雷劈数,定义为:若正整数X(在n进位下)的平方可以分割为二个数字,而这二个数字相加后恰等于X,那么X的平方就是(n进位下的)一个雷劈数,又称卡布列克数.例如55^2=3025,而30+25=55,那么 ...
- 算法题3 寻找丑数数值逼近
题目 只包含因子2.3.5的数字被称为丑数.例如4和6是丑数,而14不是丑数,因为含有因子7.习惯上把1作为第一个丑数.求按从小到大顺序的第1500个丑数. 分析 假设一个丑数顺序数组ugly_num ...
- 程序员面试题精选100题(37)-寻找丑数[算法]
题目:我们把只包含因子 2. 3和 5的数称作丑数(Ugly Number).例如 6. 8都是丑数,但 14不是,因为它包含因子 7.习惯上我们把 1当做是第一个丑数.求按从小到大的顺序的第 150 ...
- Java算法(八)详细解析:寻找完数
完数是指一个数的所有因子相加起来等于本身.如 6 = 2 + 3 + 1: 题目:一个数如果恰好等于它的因子之和,这个数就称为 "完数 ".例如6=1+2+3.编程 找出1 ...
- cstring只获取到第一个数_一文讲透 Dubbo 负载均衡之最小活跃数算法
(给ImportNew加星标,提高Java技能) 作者:why技术(本文来自作者投稿) 本文是对于Dubbo负载均衡策略之一的最小活跃数算法的详细分析.文中所示源码,没有特别标注的地方均为2.6.0版 ...
- 一文讲透Dubbo负载均衡之最小活跃数算法
本文是对于Dubbo负载均衡策略之一的最小活跃数算法的详细分析.文中所示源码,没有特别标注的地方均为2.6.0版本. 为什么没有用截止目前的最新的版本号2.7.4.1呢?因为2.6.0这个版本里面有两 ...
- C语言经典回溯算法之解决数的组合问题(详解)
文章目录 一.回溯算法 二.数的组合问题 一.回溯算法 1.回溯法 也叫试探法,实际上是一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就"回溯&q ...
最新文章
- 图像抠图算法学习 - Shared Sampling for Real-Time Alpha Matting
- idea 将普通Java项目打包成可直接执行的jar
- 浅谈C中的malloc和free
- php访问url json,PHP操作URL和PHP操作json
- Mac系统打开dmg文件出现“资源忙”的解决方法
- c语言中的scanf在java中应该怎么表达,Scanner类。
- LED显示驱动(七):图层基本测试总结
- 软件工程项目之Windows Phone Application的一个设想
- aac蓝牙编解码协议_蓝牙协议总结
- 佳博GprinterApp编辑软件使用说明
- Euraka和ZOOkeeper比较
- html内嵌式选择器,CSS样式 CSS选择器(Cascading Style Sheet)
- 解决“windows已经阻止此软件因为无法验证发行者”方法
- SpringBoot整合Freemarker导出word文档表格
- 【C++】复数域内的二次函数系数的求解
- Leetcode题解974 能被和可被 K 整除的子数组
- 计算机开机卡在进入桌面的时候,电脑启动时卡在“正在启动WINDOWS”界面如何处理...
- AI绘画——ChilloutMix模型(现实真人,实现写实逼真的图像)
- Anaconda和pip换源
- MATLAB红苹果提取(颜色分割)
热门文章
- 微信公众号之自定义菜单
- stm32cubemx hal学习记录:SPI W25Q64
- 解除win10防火墙对软件的误杀
- VS Visual Studio 2022调试控制台 输出不全 不完整 缺内容 少了很多代码 有屋设计拆单管理一体化软件 全屋定制拆单 橱柜衣柜整装 木门归方程序
- wordpress footer.php,wordpress的get_footer( )函数功能详解
- CSP-M2 B - HRZ 学英语
- 微信公众号开发之微信测试账号申请
- 2022年10月最新CPU天梯图 CPU天梯图高清完整版
- 网站服务器ftp破解,Wing FTP Server(FTP服务器)
- c语言竖线什么意思,竖线符号意思