ZOJ1657
2014-07-04 15:12
253 查看
先用筛法选出32768内的素数,并把它们依次存在一个数组里(prime_numbers),并用一个数组标识(is_prime)。
然后对每一个偶数N,枚举3~n/2之间的素数,判断正误。
水题一个= = 话说ZOJ服务器是太忙了还是什么的。我同一个代码提交上去TLE,十几分钟之后提交上去AC- -用的同一种语言- -
还有,数组要开大一些(空间允许的话,开两倍大),因为ZOJ有时候会有一些不符合题面的测试数据。。像这题就有大于2^15=32768的数据。
然后对每一个偶数N,枚举3~n/2之间的素数,判断正误。
水题一个= = 话说ZOJ服务器是太忙了还是什么的。我同一个代码提交上去TLE,十几分钟之后提交上去AC- -用的同一种语言- -
还有,数组要开大一些(空间允许的话,开两倍大),因为ZOJ有时候会有一些不符合题面的测试数据。。像这题就有大于2^15=32768的数据。
#include "stdio.h" int prime_numbers[7000]; unsigned char is_prime[66000]; void judge_prime(){ int i,j,p; for(i=2;i<=65537;i++)is_prime[i]=1; p=2;j=1; while(p<=60000){ while(is_prime[p]==0)p++; prime_numbers[j]=p; i=2; while(i*p<=60000){ is_prime[i*p]=0; i++; } p++;j++; } } int main(){ int i,n,count,j; float t1,t2; for(i=1;i<=7000;i++)prime_numbers[i]=0; judge_prime(); while(1){ scanf("%d",&n); if(!n)break; count=0; for(i=1;i<=3400;i++){ if(prime_numbers[i]>n/2)break; if(is_prime[n-prime_numbers[i]])count++; } printf("%d\n",count); } return 0; }
相关文章推荐
- zoj 1657 hash、、、
- zoj 1657 || poj 2262 Goldbach's Conjecture
- ZOJ-1657
- zoj 1657
- ZOJ1657
- ZOJ Problem Set – 1657 Goldbach's Conjecture
- zoj 1657 Goldbach's Conjecture
- zoj2290 Game----博弈 打表找规律
- ZOJ 3516
- ZOJ 3802 Easy 2048 Again 像缩进DP
- ZOJ Problem Set - 1610 Count the Colors 线段树
- zoj 2972 Hurdles of 110m
- zoj 3471 状态压缩dp
- ZOJ 3452 Doraemon's Stone Game
- ZOJ 1081 Points Within(点在多边形内判定)
- zoj 3329 One Person Game(数学期望)
- ZOJ-2195
- zoj 3228 Searching the String(trie)
- 【模板】进制转换【DBSDFZOJ】
- zoj 3541 The Last Puzzle