c++的一道题目

来源:百度知道 编辑:UC知道 时间:2024/06/11 17:20:51
数学问题
【问题描述】
在一个渺无人烟的荒岛上待了xx年之后,小Y基本上啥都不会了。所以,当小Z告诉他任何一个大于等于4的偶数都能表示成两个质数的和这个事实的时候,小Y根本不相信!小Y现在想找出一些反例,你能帮助他吗?
【输入】
输入文件math.in中仅包含一个整数n(3≤n≤1,000,000)。
【输出】
输出文件为math.out。如果n不能表示成两个质数的和,则输出“NO WAY!”;否则输出一种方案,如果有多种可行方案,输出两个质数差最大的那一种。

用筛法做这道题
两组数据
样例1:
math.in math.out
10 10=3+7
样例2:
math.in math.out
11 NO WAY!

#include<fstream>
#include<cmath>
using namespace std;
bool isPrime(int);
int main()
{
ifstream in("math.in");
if(!in) {return 1;}
ofstream out("math.out");

int n;
in>>n;
int x=2;
for(;x<n/2+1;x++)
if(isPrime(x)&&isPrime(n-x))
{
out<<x<<' '<<n-x;
break;
}
if(x==n/2+1) out<<"no way";

return 0;
}

bool isPrime(int x)
{
if(x==1) return false;
for(int i=2;i<sqrt(double(x));i++)
if(x%i==0) return false;
return true;
}

没有反例。。这个不是 哥德巴赫猜想么。。。
不过那个是说大于等于8的偶数
#include<iostream>
#include<cmath>
using namespace std;
int f(int n)
{
int i = 2;
for(; i < (int)sqrt((float)n); i++)
{
if(n%i != 0)continue;
else return(0);
}
return(1);
}