hdu 1397 (素数判定)

一开始提交了这个,果断TLE

 1 #include <cstdio>
 2 #include <iostream>
 3 #include <string>
 4 #include <queue>
 5 #include <vector>
 6 #include <map>
 7 #include <cmath>
 8 using namespace std;
 9
10 #define MEM(a,v) memset (a,v,sizeof(a))
11 // a for address, v for value
12
13 #define max(x,y) ((x)>(y)?(x):(y))
14 #define max(x,y) ((x)>(y)?(x):(y))
15
16 #define debug printf("!\n")
17
18
19 bool isPrime(int n)
20 {
21           int i;
22           for(i = 3;i<=sqrtf(n);i++)
23           {
24                     if(n%i == 0)
25                               return false;
26           }
27           return true;
28 }
29
30
31 int main()
32 {
33           int n;
34           int i,j;
35           int count;
36           while(scanf("%d",&n)!=EOF && n)
37           {
38                     count = 0;
39                     for(i = 3;i<=n/2;i+=2)
40                     {
41                               if(isPrime(i))
42                                         if(isPrime(n-i))
43                                                   count++;
44                     }
45                     printf("%d\n",count);
46           }
47
48           return 0;
49 }

看来只能打表了

 1 #include <cstdio>
 2 #include <iostream>
 3 #include <string>
 4 #include <queue>
 5 #include <vector>
 6 #include <map>
 7 #include <cmath>
 8 using namespace std;
 9
10 #define MEM(a,v) memset (a,v,sizeof(a))
11 // a for address, v for value
12
13 #define max(x,y) ((x)>(y)?(x):(y))
14 #define max(x,y) ((x)>(y)?(x):(y))
15
16 #define debug printf("!\n")
17
18 const int MM = 32769;
19
20 bool isPrime[MM] = {false};
21
22 void initPrime()
23 {
24           MEM(isPrime,true);
25           int i,j;
26
27           for(i = 1;i<=MM-1;i++) if(i%2==0) isPrime[i]=false;
28           for(i = 3;i<=MM/2+1;i++)
29           {
30                     for(j = i+i;j<=MM-1;j+=i)
31                               isPrime[j] = false;
32           }
33           isPrime[1] = false;
34           isPrime[2] = true;
35 }
36
37
38 int main()
39 {
40
41           int i,n;
42           initPrime();
43           while(scanf("%d",&n)!=EOF && n)
44           {
45                     int count = 0;
46                     for(i = 2;i<=n/2;i++)
47                               if(isPrime[i] && isPrime[n-i])
48                                         count++;
49                     printf("%d\n",count);
50           }
51
52           return 0;
53 }

421MS

时间: 2024-10-06 11:03:53

hdu 1397 (素数判定)的相关文章

hdu 1012 素数判定

这道题~以前判定prime是一个个去试着整除再去存储,上次弄过欧拉函数那题目之后就知道了,这样会更快捷: 1 prime[0] = prime[1] = 1; 2 for(int i = 2; i <maxn; i++) 3 { 4 if(!prime[i]) 5 { 6 for(int j = i * 2; j < maxn; j += i) 7 prime[j] = 1; 8 } 9 } 以下是AC代码~~~水水题~ 1 #include<iostream> 2 #includ

hdu 2012 素数判定 Miller_Rabbin

素数判定 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 71785    Accepted Submission(s): 24969 Problem Description 对于表达式n^2+n+41,当n在(x,y)范围内取整数值时(包括x,y)(-39<=x<y<=50),判定该表达式的值是否都为素数. Input 输入数据

HDU 2012 素数判定

素数判定 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 72746    Accepted Submission(s): 25331 Problem Description 对于表达式n^2+n+41,当n在(x,y)范围内取整数值时(包括x,y)(-39<=x<y<=50),判定该表达式的值是否都为素数. Input 输入数

HDU - 2012 素数判定 解题

素数判定 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 140168    Accepted Submission(s): 49576 Problem Description 对于表达式n^2+n+41,当n在(x,y)范围内取整数值时(包括x,y)(-39<=x<y<=50),判定该表达式的值是否都为素数. Input 输入

HDU 2012 素数判定(素数)

http://acm.hdu.edu.cn/showproblem.php?pid=2012 题意:水题一枚 对于表达式n^2+n+41,当n在(x,y)范围内取整数值时(包括x,y)(-39<=x<y<=50),判定该表达式的值是否都为素数. 分析: 本题的数据范围很小,求出表达式在-39到50内的所有可能值可以得到下面的数: 1523 1447 13731301 1231 1163 1097 1033 971  911 853  797 743  691  641 593  547 

HDU 1397 Goldbach&#39;s Conjecture(素数打表)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1397 Problem Description Goldbach's Conjecture: For any even number n greater than or equal to 4, there exists at least one pair of prime numbers p1 and p2 such that n = p1 + p2. This conjecture has not

HDU 1397 Goldbach&#39;s Conjecture【素数打表】

题意:给出n,问满足a+b=n且a,b都为素数的有多少对 将素数打表,再枚举 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include <cmath> 5 #include<stack> 6 #include<vector> 7 #include<map> 8 #include<algorithm> 9 #define mod=

数学#素数判定Miller_Rabin+大数因数分解Pollard_rho算法 POJ 1811&amp;2429

素数判定Miller_Rabin算法详解: http://blog.csdn.net/maxichu/article/details/45458569 大数因数分解Pollard_rho算法详解: http://blog.csdn.net/maxichu/article/details/45459533 然后是参考了kuangbin的模板: http://www.cnblogs.com/kuangbin/archive/2012/08/19/2646396.html 模板如下: //快速乘 (a

素数判定(给你两个数a、b,现在的问题是要判断这两个数组成的区间内共有多少个素数)

1 #include<stdio.h> 2 #include<math.h> 3 int func(int x)//自定义函数实现寻找素数功能 4 { 5 int i, flag = 1; 6 for (i = 2; i <= (int)sqrt((float)x); i++) //取到平方根就好,(float)x,强制将int x型转化成float型,再将平方根转化为int型 7 { 8 if (x%i == 0) //是合数,则标记 9 flag = 0; 10 } 11