质数,函数【GDOI2018模拟7.8】

博客探讨了如何将1到n的数分成质数和的最少集合,以及利用线性筛法解决相关问题。首先介绍了当n<=6000时,根据质数和的性质确定最多分为3组的情况。接着,详细解释了线性筛法筛选质数的过程,并展示了针对奇数和偶数n的不同处理方式。此外,还讨论了一种积性函数f的求解,其中对于质数x,根据x mod 3的值决定f(x)的正负。文章强调线性筛法在处理此类问题中的高效性。
摘要由CSDN通过智能技术生成

题目1(spj)

将1~n分成尽可能少的集合,使得每个集合的和都是质数。

输入

一个数n

输出

这里写图片描述

样例输入:

8

样例输出:

2
1 2 2 1 1 1 1 2

数据范围:

n<=6000。


解法

可以知道,ans最多为3。
记:m=1+2+……+n=(n+1)n/2;
1.当m为质数时,ans=1;
2.当m为偶数时,根据哥德巴赫猜想,m可以分为两个质数的和,所以ans=2;
3.当m为奇数时,我们可以随便抽一个质数(除了2)出来,剩下的就是一个偶数,转2;ans=3;

先线筛出质数(刚总结完的。。。)。
先判断完情况1。
对于一个奇数,我就把3抽出来新开一组,剩下为偶数。
对于偶数,我们可以把它分成一个较大的质数a与较小的质数b,经过实验发现,b很小,不超过30,所以就把b拿出来开一组,剩下的归为最后一组。

时间O(n)。


代码

#include<cstdio>
#include<algorithm>
#include<cstdlib>
#include<cstring>
#include<cmath>
#define ll long long
#define fo(i,a,b) for(int 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值