//_18_综合实例
//_18_main.cpp
//有关循环结构的综合实例
//任意给出一个数,判断其是否为素数,如果是,找出组成该素数的基本元素
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
//判断一个数是否是素数
bool judgePrimeNumber(int);
//判断一个素数是否可以分解成两个素数之和
bool judgeBasicElement(int);
int main()
{
int num;//要输入的元素
printf("please input a integer:");
scanf("%d",&num);
if(num<=1)
printf("input data error");
else
{
if(!judgePrimeNumber(num))//如果num不是素数情况
{
printf("%d不是素数.\n",num);
if(num%2==0)//num为偶数情况
{
printf("%d是偶数,下面来看是否可以分解成两个素数之和...\n",num);
if(!judgeBasicElement(num))
printf("%d不能分解成两个素数之和.\n",num);
else
{
for(int i=2;i<(num/2);i++)
{
if(judgePrimeNumber(i)&&judgePrimeNumber(num-i))
{
printf("%d = %d + %d.\n",num,i,num-i);
continue;
}
else
continue;
}
}
}
}
else if(!judgeBasicElement(num))//num是素数但不可以分解成两个素数之和的情况
printf("%d是素数但不可以分解成两个素数之和.\n",num);
else
{
printf("%d是素数,并且可以分解成两个素数之和:\n",num);
for(int i=2;i<(num/2);i++)
{
if(judgePrimeNumber(i)&&judgePrimeNumber(num-i))
{
printf("%d = %d + %d.\n",num,i,num-i);
continue;
}
else
continue;
}
}
}
system("pause");
return 0;
}
//判断一个数是否是素数
bool judgePrimeNumber(int number)
{
if(number==1)
return false;
else if(number==2)
return true;
else
{
for(int i=2;i<number;i++)
{
if(number%i!=0)
continue;
else
return false;
}
return true;
}
}
bool judgeBasicElement(int number)
{
int p=2;
int q=number-p;
while(p<number)//p==2的时候输出为false
{
//当p、q有一个不是素数,且p小于num时
if(!judgePrimeNumber(p)||!judgePrimeNumber(q))
{
p=p+1;
q=number-p;
}
else
return true;
}
return false;
}