HDU 2012 素数判定
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2012
Input输入数据有多组,每组占一行,由两个整数x,y组成,当x=0,y=0时,表示输入结束,该行不做处理。Output对于每个给定范围内的取值,如果表达式的值都为素数,则输出"OK",否则请输出“Sorry”,每组输出占一行。
Sample Input
0 1 0 0
Sample Output
OK
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 #include <iostream> 2 #include <algorithm> 3 #include <cstring> 4 #include <cstdio> 5 #include <vector> 6 #include <cstdlib> 7 #include <iomanip> 8 #include <cmath> 9 #include <ctime> 10 #include <map> 11 #include <set> 12 #include <queue> 13 using namespace std; 14 #define lowbit(x) (x&(-x)) 15 #define max(x,y) (x>y?x:y) 16 #define min(x,y) (x<y?x:y) 17 #define MAX 100000000000000000 18 #define MOD 1000000007 19 #define pi acos(-1.0) 20 #define ei exp(1) 21 #define PI 3.141592653589793238462 22 #define INF 0x3f3f3f3f3f 23 #define mem(a) (memset(a,0,sizeof(a))) 24 typedef long long ll; 25 ll gcd(ll a,ll b){ 26 return b?gcd(b,a%b):a; 27 } 28 bool cmp(int x,int y) 29 { 30 return x>y; 31 } 32 const int N=100005; 33 const int mod=1e9+7; 34 int prim(int x) 35 { 36 int flag=1; 37 for(int i=2;i*i<=x;i++){ 38 if(x%i==0){ 39 flag=0; 40 break; 41 } 42 } 43 return flag; 44 } 45 int main() 46 { 47 std::ios::sync_with_stdio(false); 48 int n,m; 49 while(cin>>n>>m&&(n||m)){ 50 int l,flag=1; 51 for(int i=n;i<=m;i++){ 52 l=i*i+i+41; 53 if(!prim(l)){ 54 flag=0; 55 break; 56 } 57 } 58 if(flag) cout<<"OK"<<endl; 59 else cout<<"Sorry"<<endl; 60 } 61 return 0; 62 }
HDU 2521 反素数
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2521
Input第一行输入n,接下来n行测试数据
输入包括a,b, 1<=a<=b<=5000,表示闭区间[a,b].
Output输出为一个整数,为该区间因子最多的数.如果满足条件有多个,则输出其中最小的数.
Sample Input
3 2 3 1 10 47 359
Sample Output
2 6 240
Hint
2的因子为:1 2 10的因子为:1 2 5 10
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 #include <iostream> 2 #include <algorithm> 3 #include <cstring> 4 #include <cstdio> 5 #include <vector> 6 #include <cstdlib> 7 #include <iomanip> 8 #include <cmath> 9 #include <ctime> 10 #include <map> 11 #include <set> 12 #include <queue> 13 using namespace std; 14 #define lowbit(x) (x&(-x)) 15 #define max(x,y) (x>y?x:y) 16 #define min(x,y) (x<y?x:y) 17 #define MAX 100000000000000000 18 #define MOD 1000000007 19 #define pi acos(-1.0) 20 #define ei exp(1) 21 #define PI 3.141592653589793238462 22 #define INF 0x3f3f3f3f3f 23 #define mem(a) (memset(a,0,sizeof(a))) 24 typedef long long ll; 25 ll gcd(ll a,ll b){ 26 return b?gcd(b,a%b):a; 27 } 28 bool cmp(int x,int y) 29 { 30 return x>y; 31 } 32 const int N=100005; 33 const int mod=1e9+7; 34 int prim(int x) 35 { 36 int t=0; 37 for(int i=1;i*i<=x;i++){ 38 if(i*i==x) t++; 39 else if(x%i==0) t+=2; 40 } 41 return t; 42 } 43 int main() 44 { 45 std::ios::sync_with_stdio(false); 46 int t,a,b; 47 cin>>t; 48 while(t--){ 49 cin>>a>>b; 50 int t=0,s=0; 51 for(int i=a;i<=b;i++){ 52 if(prim(i)>t){ 53 t=prim(i); 54 s=i; 55 } 56 } 57 cout<<s<<endl; 58 } 59 return 0; 60 }
HDU 2098 分拆素数和
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2098
Input输入包含一些正的偶数,其值不会超过10000,个数不会超过500,若遇0,则结束。Output对应每个偶数,输出其拆成不同素数的个数,每个结果占一行。Sample Input
30 26 0
Sample Output
3 2
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 #include <iostream> 2 #include <algorithm> 3 #include <cstring> 4 #include <cstdio> 5 #include <vector> 6 #include <cstdlib> 7 #include <iomanip> 8 #include <cmath> 9 #include <ctime> 10 #include <map> 11 #include <set> 12 #include <queue> 13 using namespace std; 14 #define lowbit(x) (x&(-x)) 15 #define max(x,y) (x>y?x:y) 16 #define min(x,y) (x<y?x:y) 17 #define MAX 100000000000000000 18 #define MOD 1000000007 19 #define pi acos(-1.0) 20 #define ei exp(1) 21 #define PI 3.141592653589793238462 22 #define INF 0x3f3f3f3f3f 23 #define mem(a) (memset(a,0,sizeof(a))) 24 typedef long long ll; 25 ll gcd(ll a,ll b){ 26 return b?gcd(b,a%b):a; 27 } 28 bool cmp(int x,int y) 29 { 30 return x>y; 31 } 32 const int N=10005; 33 const int mod=1e9+7; 34 int prim(int x) 35 { 36 int flag=1; 37 for(int i=2;i*i<=x;i++){ 38 if(x%i==0){ 39 flag=0; 40 break; 41 } 42 } 43 if(flag) return 1; 44 return 0; 45 } 46 int main() 47 { 48 std::ios::sync_with_stdio(false); 49 int n; 50 while(cin>>n&&n){ 51 int t=0; 52 for(int i=2;i<n/2;i++){ 53 if(prim(i)&&prim(n-i)){ 54 t++; 55 } 56 } 57 cout<<t<<endl; 58 } 59 return 0; 60 }
POJ 2262 Goldbach's Conjecture
题目链接:http://poj.org/problem?id=2262
Every even number greater than 4 can be
written as the sum of two odd prime numbers.
For example:
8 = 3 + 5. Both 3 and 5 are odd prime numbers.
20 = 3 + 17 = 7 + 13.
42 = 5 + 37 = 11 + 31 = 13 + 29 = 19 + 23.
Today it is still unproven whether the conjecture is right. (Oh wait, I have the proof of course, but it is too long to write it on the margin of this page.)
Anyway, your task is now to verify Goldbach's conjecture for all even numbers less than a million.
Input
Each test case consists of one even integer n with 6 <= n < 1000000.
Input will be terminated by a value of 0 for n.
Output
Sample Input
8 20 42 0
Sample Output
8 = 3 + 5 20 = 3 + 17 42 = 5 + 37
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 #include <iostream> 2 #include <algorithm> 3 #include <cstring> 4 #include <cstdio> 5 #include <vector> 6 #include <cstdlib> 7 #include <iomanip> 8 #include <cmath> 9 #include <ctime> 10 #include <map> 11 #include <set> 12 #include <queue> 13 using namespace std; 14 #define lowbit(x) (x&(-x)) 15 #define max(x,y) (x>y?x:y) 16 #define min(x,y) (x<y?x:y) 17 #define MAX 100000000000000000 18 #define MOD 1000000007 19 #define pi acos(-1.0) 20 #define ei exp(1) 21 #define PI 3.141592653589793238462 22 #define INF 0x3f3f3f3f3f 23 #define mem(a) (memset(a,0,sizeof(a))) 24 typedef long long ll; 25 ll gcd(ll a,ll b){ 26 return b?gcd(b,a%b):a; 27 } 28 bool cmp(int x,int y) 29 { 30 return x>y; 31 } 32 const int N=10005; 33 const int mod=1e9+7; 34 int prim(int x) 35 { 36 int flag=1; 37 for(int i=2;i*i<=x;i++){ 38 if(x%i==0){ 39 flag=0; 40 break; 41 } 42 } 43 if(flag) return 1; 44 return 0; 45 } 46 int main() 47 { 48 std::ios::sync_with_stdio(false); 49 int n; 50 while(cin>>n&&n){ 51 for(int i=2;i<n;i++){ 52 if(prim(i)&&prim(n-i)){ 53 cout<<n<<" = "<<i<<" + "<<n-i<<endl; 54 break; 55 } 56 } 57 } 58 return 0; 59 }
题解:都很简单 莫得撒子好说的 ...