C++程序设计 (第三版) 谭浩强 习题4.7
习题 4.7 写一个函数验证哥德巴赫猜想:一个不小于6的偶数可以表示为两个素数之和,如6=3+3,8=3+5,10=3+7···在主函数中输入一个不小于6的偶数n,然后调用函数gobaha函数中再调用prime函数,prime函数的作用是判别一个数是否为素数。在gobaha函数中输出以下形式的结果:34=3+31。
IDE工具:VS2010
Note: 使用不同的IDE工具可能有部分差异。
代码块
方法1:
#include <iostream>
using namespace std;
void gobaha(int n); //定义函数gobaha
int prime(int n); //定义prime函数
int main(){
int num;
cout<<"Please enter number: ";
cin>>num;
for(; num < 6 || (num % 2) != 0;){ //如果输入数字不符合条件重复执行输入
cout<<"Error! Retry!\nPlease enter number: ";
cin>>num;
}
gobaha(num);
system("pause");
return 0;
}
int prime(int n){
int i;
for(i = 2; i < n && (n % i != 0); i++);
return n == i ? 1 : 0; //判断是否为素数,是返回1,否返回0
}
void gobaha(int n){
int m, i;
for(i = 3; i < n; i++)
if(prime(i) == 1){
m = n - i;
if(prime(m) == 1 && i <= m)
cout<<n<<'='<<i<<'+'<<m<<endl;
}
}
方法2:使用指针,函数的模块化设计,分配内存
#include <iostream>
#include <cmath>
using namespace std;
void inputNum(int *number){
cout<<"Enter Even Number(>= 6): ";
cin>>*number;
while(*number < 6 || (*number % 2) != 0){
if(*number < 6){
cout<<"Number cannot be less than 6! Retry!"<<endl;
}
if((*number % 2) != 0){
cout<<"Number must be even number! Retry!"<<endl;
}
cout<<"Enter Even Number(>= 6): ";
cin>>*number;
}
}
bool isPrime(int number){
int num = number;
for(int i = 2; i <= int(sqrt(double(num))); i++){
if(num % i == 0){
return false;
}
}
return true;
}
void godbaha(int *number){
int num = *number;
for(int i = 3; i < num; i+=2){
for(int j = 3; j < num; j+= 2){
if(isPrime(i) == true && isPrime(j) == true){
if(num == i + j){
cout<<num<<" = "<<i<<" + "<<j<<endl;
}
}
}
}
}
int main(){
int *number = new int;
inputNum(number);
godbaha(number);
delete(number);
system("pause");
return 0;
}