寻找素数对
哥德巴赫猜想大家都知道一点吧.我们现在不是想证明这个结论,而是想在程序语言内部能够表示的数集中,任意取出一个偶数,来寻找两个素数,使得其和等于该偶数.
做好了这件实事,就能说明这个猜想是成立的.
由于可以有不同的素数对来表示同一个偶数,所以专门要求所寻找的素数对是两个值最相近的.
Input
输入中是一些偶整数M(5<M<=10000).
Output
对于每个偶数,输出两个彼此最接近的素数,其和等于该偶数.
Sample Input
20 30 40
Sample Output
7 13
13 17
17 23
//(数论素数(欧拉筛,埃氏筛)
#include<iostream>
#include<algorithm>
#include<string>
#include<string.h>
#include<cstdio>
#include<queue>
#include<stack>
#include<set>
#include<vector>
using namespace std;
int n,a[10005];//标记数组
int main(){
for(int i = 1; i <= 10000; i++){//打表标记素数标记数组a[],1表示是素数,0代表不是
a[i] = 1;
for(int j = 2; j * j <= i; j++){
if(i % j == 0){
a[i] = 0;
break;
}
}
}
while(scanf("%d",&n) != EOF){
for(int i = n/2; i > 0; i--){//从中间向两边开始遍历,第一个有效素数对的两个值一定最相进
if(a[i] == 1 && a[n - i] == 1){
printf("%d %d\n",i,n - i);
break;
}
}
}
return 0;
}
a/b + c/d
给你2个分数,求他们的和,并要求和为最简形式。
Input
输入首先包含一个正整数T(T<=1000),表示有T组测试数据,然后是T行数据,每行包含四个正整数a,b,c,d(0<a,b,c,d<1000),表示两个分数a/b 和 c/d。
Output
对于每组测试数据,输出两个整数e和f,表示a/b + c/d的最简化结果是e/f,每组输出占一行。
Sample Input
2
1 2 1 3
4 3 2 3
Sample Output
5 6
2 1
//(数论(最大公约数gcd()最小公倍数lcm())
#include<iostream>
#include<algorithm>
#include<string>
#include<string.h>
#include<cstdio>
#include<queue>
#include<stack>
#include<set>
#include<vector>
using namespace std;
int gcd(int a,int b){
if(b == 0){
return a;
}
return gcd(b,a % b);
}
int main(){
int t = 0;
cin >> t;
int a,b,c,d;
int e,f;
while(t--){
scanf("%d%d%d%d",&a,&b,&c,&d);
e = a*d + b*c;
f = b*d;
// printf("%d %d\n",(int)(e / gcd(e,f)),(int)(f / gcd(e,f)));
printf("%d %d\n",e / gcd(e,f),f / gcd(e,f));
}
return 0;
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。