算法题每日一练---第26天:梅森素数

简介: 因为法国数学家梅森的猜想,我们习惯上把形如:2^n - 1 的素数称为:梅森素数。

一、问题描述


如果一个数字的所有真因子之和等于自身,则称它为“完全数”或“完美数”

例如:

6=1+2+328=1+2+4+7+14

早在公元前 300 多年,欧几里得就给出了判定完全数的定理:

2^n-1是素数,则2^(n-1) * (2^n-1) 是完全数。

因为法国数学家梅森的猜想,我们习惯上把形如:2^n - 1 的素数称为:梅森素数。


截止到2021年10月6日,找到了第48个梅森素数。新近找到的梅森素数太大,以至于难于用一般的编程思路窥其全貌,所以我们把任务的难度降低一点:

19631年,美国伊利诺伊大学为了纪念他们找到的第23个梅森素数n=11213在每个寄出的信封上都印上了2^11213−1是素数”的字样。2^11213−1这个数字已经很大(3000多位),请你编程求出这个素数的十进制表示的最后100位。


二、题目要求

考察

数组的熟练、进位取余、取模
建议用时15~25min



三、问题分析


题目要求求出2^11213−1的最后一百位,普通的int、long long int 可承受不了这么大的数据量,我们换一种思路。


为什么不用数组存储,仅仅一个100位的数组就可以解决问题。数组第一个元素设为1,每一次每个元素乘以一个2,超出则向前进一位,剩下%10为当前位。


928*2,数组存储a[3]=1=8,a[2]=2,a[1]=8a[1]*2+0=16,超出向前进位,那a[1]=a[1]%10=6a[2]*2+1=5,不要进位,加的1是之前8进的a[3]*2+0=18,超出向前进位,那a[3]=a[3]%10=8a[4]=1结果为1856


四、编码实现


#include<iostream>usingnamespacestd;
intmain()
{
inti,j,n=11213,m,a[108]={0};//初始化定义a[1]=1;//定义第一项for(i=0;i<n;i++)//第一层循环,判断几个2相乘    {
intr=0;//进位数for(j=1;j<=100;j++)//100位直接循环        {   
m=a[j]*2+r;//m暂时存储结果a[j]=m%10;//取模r=m/10;//是否进位        }
    }
a[1]-=1;//第一项别忘记-1哦for(i=100;i>=1;i--)//输出结果cout<<a[i];
return0;
}


五、输出结果


输出结果为:


8586718527586602439602335283513944980064327030278104224144971883680541689784796267391476087696392191




相关文章
|
算法
初阶OI素数算法——埃拉托尼斯筛
时间复杂度比较优秀且易于理解的素数筛选法
89 0
|
2月前
|
算法 Java 程序员
【算法每日一练及解题思路】有n级台阶,一次只能上1级或2级,共有多少种走法?
本文深入解析了“爬楼梯问题”,探讨了递归与迭代两种解法,并提供了Java代码实现。通过分析问题本质,帮助读者理解动态规划技巧,提高解决实际编程问题的能力。关键词:Java, 算法, 动态规划, 爬楼梯问题, 递归, 迭代。
114 0
|
4月前
|
存储 算法 Java
LeetCode初级算法题:反转链表+统计N以内的素数+删除排序数组中的重复项Java详解
LeetCode初级算法题:反转链表+统计N以内的素数+删除排序数组中的重复项Java详解
48 0
|
6月前
|
算法 Serverless 数据安全/隐私保护
RSA算法中,为什么需要的是两个素数?
PrimiHub是密码学专家团队开发的开源隐私计算平台,关注数据安全、密码学等领域。RSA算法使用两个素数确保安全,因为它们的乘积易于计算,但分解困难,形成加密基础。算法涉及选择大素数、计算乘积、生成公私钥对。加密时,消息通过公钥变形;解密则需私钥,安全性依赖于大数分解问题的复杂性。
宝藏例题(欧几里得算法+素数的三种境界………)
宝藏例题(欧几里得算法+素数的三种境界………)
宝藏例题(欧几里得算法+素数的三种境界………)
|
存储 算法 Python
信息学奥赛 试除法:高效筛选素数的算法
本文介绍了在Python代码中如何使用试除法高效筛选素数。
138 0
|
7月前
|
机器学习/深度学习 存储 算法
数据结构与算法面试题:给定非负整数 m 和 n,计算不大于 m 的数字中,素数的个数。(提示:算法原理为埃氏筛、线性筛)
数据结构与算法面试题:给定非负整数 m 和 n,计算不大于 m 的数字中,素数的个数。(提示:算法原理为埃氏筛、线性筛)
102 0
|
存储 分布式计算 算法
转:如何利用素数算法加强企业文档管理软件的效能和安全性
利用素数算法来加强企业文档管理软件的效能和安全性,可是个有趣的法子。这可不只是在电影里才看得到的情节,素数算法可以在好几个方面给软件的性能和安全性添点料。下面就来看看有哪些酷炫的方式吧——
94 0
|
算法
转:素数算法,看看电脑是怎么找素数的
素数算法主要应用于计算科学,密码学和数论等领域。例如,在密码学中,素数算法用于生成密钥;在数论中,素数算法用于研究质数分布。素数算法的历史可以追溯到公元前300年左右的古希腊数学家,他们发现了素数的重要性。随着数学和计算机科学的发展,素数算法也在不断改进和提高。
197 2
下一篇
DataWorks