CF735D Taxes 哥德巴赫猜想\判定素数 \进一步猜想
http://codeforces.com/problemset/problem/735/D
题意是。。一个数n的贡献是它的最大的因子,这个因子不能等于它本身
然后呢。。现在我们可以将n拆成任意个数的整数相加,每个数最小只能拆成2,
单独计算每个数的贡献,然后加起来使他的贡献最小。。那么我们肯定是拆成质数最赚
因为质数对答案的贡献是1...
所以现在这个问题变成了把一个数拆成最少个数的质数
那么我们不知道最少能拆成多少个质数啊。。
我一开始想的是你每次找最接近这个数的质数。。一直找下去应该是可以的。。但是我不知道最后剩下一个合数怎么办
也不知道这种情况会不会发生
到这里我没有探索也没有画图就放弃了。。因为我发现。。预处理2e9的素数好像不太可能啊。。不过这里有个隐藏的前提
那就是如果预处理2e9的素数是必须的话。。那我们无法做到。。那么就不用做这个题了。。但是我们现在并不确定题目的
解法是一定需要这个预处理的。。所以我们可以选择继续探索
Tip:当你无法解决手头的问题。。那么你可以去找一道相似的题目或者分解成一些子问题去一道一道地做
先解决其他的题目
对于2,本身就是质数不用分解
对于3,本身就是质数不用分解
对于4,可以分解成2,2 因为题目要求最小是2,这里如果忘记不回顾的话。。很炸,要习惯性地检查题目的条件
对于5,可以分解成2,3
对于6,可以分解成3,3
对于7,可以分解成3,2,2
对于8,可以分解成5,3
对于9,可以分解成2,7
对于10,可以分解成5,5
这样枚举很累的。。我们写程序打一个表
打表的程序如下所示
#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
bool check(int x){
int i;//小心爆int
for(i=;i*i<=x;++i){
if(x%i==) return false;
}
return true;
}
int rec[];
int cur;
bool fnd;
void dfs(int x,int dep){
int i;
if(x==) return;
if(x==){
printf("val:%d--",cur);
for(i=;i<dep;++i){
printf("%d ",rec[i]);
}
printf("\n");
fnd=true;
return;
}
for(i=x;i>=&&!fnd;--i){
rec[dep]=i;
if(i==||check(i))
dfs(x-i,dep+);
}
}
int n;
int main(){
scanf("%d",&n);
int i;
for(i=;i<=n;++i){
fnd=false;
cur=i;
dfs(i,);
}
return ;
}
打表之后我们发现了一个很大的问题。。
最多不超过3个数。。
我们再观察一下奇偶性。。然后就能发现。。偶数总是能分解成两个质数
从表中看出。。这些质数距离不太固定。。因此你每次找最近的质数。。应当是不太对的哦
既然偶数总是能分解成两个质数,不相信的话我们可以专门打一个表啊
全部是两项。。
那么对于偶数。。特判2就可以得到结果了
但是对于奇数呢。。由于最小的项为2。。。我们不能
考虑-1,然后分解一个偶数。。
我们要考虑-2之后是一个什么情况。。奇数减去2之后仍然是一个奇数
如果这时它是一个质数。。那么我们就已经成功地把这个数分解成了两个质数
如果这时它不是一个质数。。那么我们仍然把它看成奇数。。分出一个1来。。剩下的一个偶数就能分解成两个质数
分出来的这个1和减去的2合并成3,哈哈。。正好3也是一个质数。。要不然说不定要构造一个质数呢
3是一个质数。。而剩下的那个偶数可以分解成两个质数。。一共三个质数
最后我们还要考虑不用分解的情况。。它本身就是一个质数你还分解它干什么。。
通过这个题我们可以看出来打表看规律是解决数论问题的一个非常重要的手段
并且我们要熟悉快速打表。。而且打表也不是一定正确的。。对于我们发现的一个偶数一定能分解成两个质数这个结论
他是一个哥德巴赫猜想。。我们可以认为在ll内它都是正确的。。并且根据群巨打表的情况在ll范围内。。相邻两个
素数的最大距离gap大概是778...所以说暴力找的话也是很好找的
代码虽然简单。。但是思路却要开阔,敢于探索。。不能太笨纯手推。。答案来之不易啊
CF735D Taxes 哥德巴赫猜想\判定素数 \进一步猜想的更多相关文章
- Codeforces Round #382 (Div. 2) D. Taxes 哥德巴赫猜想
D. Taxes 题目链接 http://codeforces.com/contest/735/problem/D 题面 Mr. Funt now lives in a country with a ...
- D. Taxes 哥德巴赫猜想
http://codeforces.com/contest/735/problem/D 这题其实我还不是很懂,那个只是猜想,然而却用了. 只想说说找到第一小于n的素数这种思路是不行的. 121 = 1 ...
- Codefroces 735D Taxes(哥德巴赫猜想)
题目链接:http://codeforces.com/problemset/problem/735/D 题目大意:给一个n,n可以被分解成n1+n2+n3+....nk(1=<k<=n). ...
- ACM_哥德巴赫猜想(素数筛)
哥德巴赫猜想 Time Limit: 2000/1000ms (Java/Others) Problem Description: 哥德巴赫猜想大概是这么一回事:“偶数(>=4) == 两个质数 ...
- Codeforces735D Taxes(哥德巴赫猜想)
题意:已知n元需缴税为n的最大因子x元.现通过将n元分成k份的方式来减少缴税.问通过这种处理方式需缴纳的税费. 分析: 1.若n为素数,不需分解,可得1 2.若n为偶数,由哥德巴赫猜想:一个大于2的偶 ...
- Codeforces 735D:Taxes(哥德巴赫猜想)
http://codeforces.com/problemset/problem/735/D 题意:给出一个n,这个n可以分解成 n = n1 + n2 + -- + nk,其中k可以取任意数.要使得 ...
- 洛谷 P1579 哥德巴赫猜想(升级版)【筛素数/技巧性枚举/易错】
[链接]:https://www.luogu.org/problemnew/show/P1579 题目背景 1742年6月7日哥德巴赫写信给当时的大数学家欧拉,正式提出了以下的猜想:任何一个大于9的奇 ...
- 洛谷P1579 哥德巴赫猜想(升级版)【水题+素数】
1742年6月7日哥德巴赫写信给当时的大数学家欧拉,正式提出了以下的猜想:任何一个大于9的奇数都可以表示成3个质数之和.质数是指除了1和本身之外没有其他约数的数,如2和11都是质数,而6不是质数,因为 ...
- code forces 382 D Taxes(数论--哥德巴赫猜想)
Taxes time limit per test 2 seconds memory limit per test 256 megabytes input standard input output ...
随机推荐
- linux内置的审计跟踪工具------last和lastb
last是linux的一个内置工具,可以用来查看最后登录服务器的用户.它对于追踪非常有用. last命令显示的是来自/var/log/wtmp文件创建起,所有登录的用户.这个文件是一个二进制文件,不能 ...
- CentOS基础指令备忘
功能 指令 可用参数 示例 说明 新建文件夹 mkdir mkdir etc/temp 在当前目录的etc文件夹下新建temp文件夹 新建文件 vi vi abc.sh 新建名为abc.sh的 ...
- problem-record-mysql
#!/bin/bash # # Update_Problem - updates problem record in database ################################ ...
- Valentine's Day Round 1001.Ferries Wheel(hdu 5174)解题报告
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5174 题目意思:给出 n 个人坐的缆车值,假设有 k 个缆车,缆车值 A[i] 需要满足:A[i−1] ...
- 关于Javascript splice方法的一个坑。
w3c相关文档:http://www.w3school.com.cn/jsref/jsref_splice.asp bug:购物车计算价格的时候.加商品没问题,减商品的时候价格总是计算错误. 经排查发 ...
- [Android Pro] AAR and JAR
svn status svn log --limit 3 > RELEASE_NOTE.txt cat RELEASE_NOTE.txt pwd project_name_prefix=&quo ...
- ASP.NET Global 全局事件处理
添加Global文件,名字不要改 Global类说明: using System; using System.Collections.Generic; using System.IO; using S ...
- 比较原声socket 、GCDAsyncSocket
原声socket NSInputStream 输入流(OC)NSOutputStream 输出流(OC)1:通过c语言的输入输出流CFReadStreamRef/CFWirteStreamRef(输入 ...
- instanceof、 isinstance 与 isAssignableFrom的区别
instanceof运算符 只被用于对象引用变量,检查左边的被测试对象 是不是 右边类或接口的 实例化.如果被测对象是null值,则测试结果总是false. 形象地:自身实例或子类实例 instanc ...
- alias命令(使用命令别名)
通过alias命令可以给一些命令定义别名,如,将长的难记住的命令起一个容易记住的别名,提高工作效率 alias -p 查看已有的别名列表 命名别名格式: alias 新命令名='原命令名 -参数/选项 ...