最近这图火了,先不管是否有这人这事或者真人真事,耿直的IT男看到这图是一道算数题,真真实实的一道算法题,那就开始算吧。
问题描述:
质数分解:数字(num)707829217分解两个质数,
微信ID:大写字母NY后面跟着两个质数,大的在前,小的在后
出现3的次数:找出1到微信号的奇数序列中,出现3的次数
一, 质数分解(prim)
解释:
质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数,就是说能被1和自身整除,不能被其他数字整除。
思路:
由于确定了707829217是两个质数之积,所以只需要求出其中一个,另一个一除就出来了。
而较小的质数肯定小于等于srqt(707829217)【srqt:平方根】,即小于等于这个num开方后的数字。
只需要使用基本的筛法,筛出srqt(707829217)内的所有质数。质数表求出来后,枚举所有质数,判断这个质数是否可以被707829217整除,如果可以,就找到了两个质数。
二, 微信ID:
微信ID为:NY+(prim.big)+(prime.small)
三, 出现3的次数
计算出微信号之后,生成1到微信号的奇数序列,再把这个序列转成字符串序号,用count计算这个字符串序号出现3的次数
结果(用python写的)
我也不知道我这算法对不对,加上避免有伸手党直接抄袭答案等,我就给部分地方打了码
如有不同或者新的想法,欢迎前来评论~