NEFU 2 猜想
来源:互联网 发布:算法与程序的关系 编辑:程序博客网 时间:2024/05/16 17:19
筛法学习第一题就让我感觉不好用
#include<stdio.h>#include<iostream>#include<string.h>#define maxn 1<<24using namespace std;//bool isNotprime[maxn];位置必须是这样极其诡异,呵呵,我对编译器还是了解太少了//首先必须是bool型,然后初始化的时候也得注意int prime[1080000];//经过计算式n/ln(n) = 1048576,但是必须开到1080000//否则超memorybool isNotprime[maxn];int total;void makeprime(){ total = 0; memset(isNotprime,true,sizeof(isNotprime)); memset(prime,0,sizeof(prime)); for(int i=2;i<=maxn;i++) { if(isNotprime[i]==true) { prime[total] = i; total++; } for(int j=0;j<total&&i*prime[j]<=maxn;j++) { isNotprime[i*prime[j]] = false; if(i%prime[j] == 0) break; } }}int main(){ makeprime(); int n; while(scanf("%d",&n)!=EOF) { int ans = 0; for(int i=0;n/2>=prime[i];i++) { if(isNotprime[n-prime[i]]==true) ans++; } printf("%d\n",ans); } return 0;}有兴趣的请继续往下看,有几点我想总结下:
1. 本来数据量不大,可以直接用普通筛法,但是用了线性筛法之后出现了一些问题,以下是针对线性筛法的一些测试
2. 题目数据是2^24,所以对于数组来说有点大,因此要用bool变量存储isNotprime[i],用int会错(可以照着代码改下测试),而prime[i]数组则不能开到2^24,否则提交后超memory(可以提交测试),因此需要用素数定理计算:n/in(n)= 1048576,所以一开始我开到1050000,但是运行后会直接溢出,shit........(可以测试一下),最后至少要开到1080000才不会溢出。
3. 果然数据一大,数组就是不可靠........另外用bool的话有两种初始化的办法,一种使用0和1初始化,还有一种使用true和false初始化,两种应该都是可以的,但是一定要注意代码的习惯,用true的if语句就是if(isNotprime[i]),用0的语句就是if(!isNotprime[i])
4. 写线性筛法应该是可以用map做一个映射的,浙江校赛有道题就是用map暴力,很好用~~如果有谁敲完了可以交流下,我就偷个懒~~
0 0
- NEFU 2 猜想
- NEFU 2 猜想
- NEFU 2 猜想
- nefu 2哥德巴赫猜想
- NEFU OJ 2 猜想
- nefu 2 猜想 (哥德巴赫猜想)
- NEFU 2 猜想(数论&筛法)
- nefu 2 猜想(素数&&筛选)
- nefu 2 猜想 筛法求素数
- 【Eternallyc】NEFU-2-哥德巴赫猜想
- NEFU 2 猜想 高效素数打表
- [数论] NEFU 2 猜想 筛素数
- nefu 2 哥德巴赫猜想 素数筛法+判定
- (数论及应用2.3)nefu 2 猜想(哥德巴赫猜想:求一个合数可以使用几个素数对来表示)
- 猜想2
- NEFU-4-2-Center Alignment
- nefu 2 打素数表
- NEFU-2-C-Tic-tac-toe
- Android EditText缴获与监听输入事件
- 黑马程序员--单例设计模式
- 支持新版chrome,用webstorm编译形成css和sourcemap,调试sass和less源文件
- 如何“识别”优秀的程序员
- ACM练习之《奥运火炬到福州》
- NEFU 2 猜想
- MySQL新建用户,授权,删除用户,修改密码
- Android异步操作总结
- 02.实例篇:微信主页面模仿——ActionBar的应用(上篇)
- 三个bug的定位过程---也谈追踪配置库记录的重要性
- Ext.TabPanel中的items详解
- CareerCup之1.8 字符串移位包含问题
- IOS中的MVC整体框架图
- 为现代JavaScript开发做好准备