戴公子预初,看到个故事:

有位数学家卡普利加在一次旅行中,遇到猛烈的暴风雨,电闪雷鸣过后,他看到路边一块里程碑,被雷电劈成两半,一半上刻著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的雷劈数算法,寻找雷劈数相关推荐

  1. C#分页的总页数算法

    .Net中通用分页页数计算方式,分页的总页数算法  总记录数:totalRecord 每页最大记录数:maxResult 算法一: totalPage = totalRecord % maxResul ...

  2. JzxxOJ Problem 4209: 寻找雷劈数 题解

    4209: 寻找雷劈数 题解 这是OJ的一道题,主要考验了数字的拆分,比较简单的! 题目 Code #include<iostream> #include<cstdio> #i ...

  3. 寻找雷劈数c语言,求雷劈数的来历。

    雷劈数 有位外国数学家叫卡普利加,在一次旅行中,遇到猛烈的暴风雨,电闪雷鸣过后,他看到路边一块里程碑,被雷电劈成两半,一半上刻著30,另一半刻著25.这时,卡普利加的脑际中忽然发现了一个绝妙的数学关系 ...

  4. 寻找雷劈数(C实现)

    雷劈数,定义为:若正整数X(在n进位下)的平方可以分割为二个数字,而这二个数字相加后恰等于X,那么X的平方就是(n进位下的)一个雷劈数,又称卡布列克数.例如55^2=3025,而30+25=55,那么 ...

  5. 算法题3 寻找丑数数值逼近

    题目 只包含因子2.3.5的数字被称为丑数.例如4和6是丑数,而14不是丑数,因为含有因子7.习惯上把1作为第一个丑数.求按从小到大顺序的第1500个丑数. 分析 假设一个丑数顺序数组ugly_num ...

  6. 程序员面试题精选100题(37)-寻找丑数[算法]

    题目:我们把只包含因子 2. 3和 5的数称作丑数(Ugly Number).例如 6. 8都是丑数,但 14不是,因为它包含因子 7.习惯上我们把 1当做是第一个丑数.求按从小到大的顺序的第 150 ...

  7. Java算法(八)详细解析:寻找完数

    完数是指一个数的所有因子相加起来等于本身.如 6 = 2 + 3 + 1: 题目:一个数如果恰好等于它的因子之和,这个数就称为 "完数 ".例如6=1+2+3.编程     找出1 ...

  8. cstring只获取到第一个数_一文讲透 Dubbo 负载均衡之最小活跃数算法

    (给ImportNew加星标,提高Java技能) 作者:why技术(本文来自作者投稿) 本文是对于Dubbo负载均衡策略之一的最小活跃数算法的详细分析.文中所示源码,没有特别标注的地方均为2.6.0版 ...

  9. 一文讲透Dubbo负载均衡之最小活跃数算法

    本文是对于Dubbo负载均衡策略之一的最小活跃数算法的详细分析.文中所示源码,没有特别标注的地方均为2.6.0版本. 为什么没有用截止目前的最新的版本号2.7.4.1呢?因为2.6.0这个版本里面有两 ...

  10. C语言经典回溯算法之解决数的组合问题(详解)

    文章目录 一.回溯算法 二.数的组合问题 一.回溯算法 1.回溯法 也叫试探法,实际上是一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就"回溯&q ...

最新文章

  1. 图像抠图算法学习 - Shared Sampling for Real-Time Alpha Matting
  2. idea 将普通Java项目打包成可直接执行的jar
  3. 浅谈C中的malloc和free
  4. php访问url json,PHP操作URL和PHP操作json
  5. Mac系统打开dmg文件出现“资源忙”的解决方法
  6. c语言中的scanf在java中应该怎么表达,Scanner类。
  7. LED显示驱动(七):图层基本测试总结
  8. 软件工程项目之Windows Phone Application的一个设想
  9. aac蓝牙编解码协议_蓝牙协议总结
  10. 佳博GprinterApp编辑软件使用说明
  11. Euraka和ZOOkeeper比较
  12. html内嵌式选择器,CSS样式 CSS选择器(Cascading Style Sheet)
  13. 解决“windows已经阻止此软件因为无法验证发行者”方法
  14. SpringBoot整合Freemarker导出word文档表格
  15. 【C++】复数域内的二次函数系数的求解
  16. Leetcode题解974 能被和可被 K 整除的子数组
  17. 计算机开机卡在进入桌面的时候,电脑启动时卡在“正在启动WINDOWS”界面如何处理...
  18. AI绘画——ChilloutMix模型(现实真人,实现写实逼真的图像)
  19. Anaconda和pip换源
  20. MATLAB红苹果提取(颜色分割)

热门文章

  1. 微信公众号之自定义菜单
  2. stm32cubemx hal学习记录:SPI W25Q64
  3. 解除win10防火墙对软件的误杀
  4. VS Visual Studio 2022调试控制台 输出不全 不完整 缺内容 少了很多代码 有屋设计拆单管理一体化软件 全屋定制拆单 橱柜衣柜整装 木门归方程序
  5. wordpress footer.php,wordpress的get_footer( )函数功能详解
  6. CSP-M2 B - HRZ 学英语
  7. 微信公众号开发之微信测试账号申请
  8. 2022年10月最新CPU天梯图 CPU天梯图高清完整版
  9. 网站服务器ftp破解,Wing FTP Server(FTP服务器)
  10. c语言竖线什么意思,竖线符号意思