博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
拆素数【找规律,数学】
阅读量:3952 次
发布时间:2019-05-24

本文共 807 字,大约阅读时间需要 2 分钟。

牛牛现在有一个包含 n 个正整数的数组 a ,牛牛可以将其中的每个数 a[i] 都拆成若干个和为 a[i] 的正整数,牛牛想知道拆后(也可以一个数都不拆)这个数组最多能有多少个素数。

对于1,它本来就不是素数,最多能拆成0个素数的和;

对于2和3,最多能拆成1个素数的和;

4 = 2 + 2,最多能拆成2个素数的和;

5 = 2 + 3,最多能拆成2个素数的和;

6 = 2 + 2 + 2,最多能拆成3个素数的和;

7 = 2 + 2 + 3,最多能拆成3个素数的和;

8 = 2 + 2 + 2 + 2,最多能拆成4个素数的和;

……

由此易知,从4开始,所有的数都可以拆成若干2和3的和,并且可以通是否有3来控制奇偶性。num%20时,有多少个2就有多少个素数,此时(num+1)%21,从num的求和式中随便挑一个2替换成3就能够凑出num+1,求和式中素数的个数不变,num+2只是又拆出一个2重复这个过程,此时num+2的求和式中相比num+1和num,素数增加一个。综上,每个数num最多可以拆成(int)num/2个素数相加。

如此一来,我们就可以通过遍历数组得到答案:

#include 
#include
using namespace std;int main() {
int n, m; cin >> n; long long int cnt = 0; while(n) {
cin >> m; if(m == 2 || m == 3) {
++cnt; } else {
cnt += m / 2; } n--; } cout << cnt << endl;}

转载地址:http://gfyzi.baihongyu.com/

你可能感兴趣的文章
编译错误处理noproguard.classes-with-local.dex已杀死
查看>>
LTE - CSFB技术
查看>>
GSM链路层信令协议
查看>>
技术道德
查看>>
“需求为王”才是根本
查看>>
高效率的危害
查看>>
寻找边缘性创新
查看>>
让创意瞄准市场
查看>>
高效经理人应具有的八个重要习惯
查看>>
优秀的领导者能读懂人才
查看>>
大智若愚也是领导力
查看>>
android如何编译MTK的模拟器
查看>>
android如何添加AP中要使用的第三方JAR文件
查看>>
利用sudo命令为Ubuntu分配管理权限
查看>>
Ubuntu下几个重要apt-get命令用法与加速UBUNTU
查看>>
Ubuntu中网页各种插件安装命令
查看>>
使用tar命令备份Ubuntu系统
查看>>
ubuntu flash 文字乱码解决方案
查看>>
在ubuntu中运行exe文件
查看>>
ubuntu安装命令
查看>>