习题3-2:质数的和与积(POJ 4138)(判断质数*)

习题3-2:质数的和与积(POJ 4138)

Note:

0 1不是质数。

注意判断是否是质数的函数写法。

问题描述:

两个质数的和是S,它们的积最大是多少?

输入

一个不大于10000的正整数S,为两个质数的和。

输出

一个整数,为两个质数的最大乘积。数据保证有解。

样例输入

50

样例输出

589
#include
#include
using namespace std;

int main(){
	int a[10000];//用于存放S以内的所有质数 
	int S; //输入一个不大于10000的正整数S,为两个质数的和
	int k = 0, i, j, max = 0, flag;
	
	cin >> S;
	
	for(i = 2; i <= S; i++)//遍历2~s内的数,若是质数则存储在数组a[]中 
	{
		flag = 0;
		for(j = 2; j < i; j++)
			if(i % j == 0)//能被除1和自身外的数整除,说明不是质数,做好标记并跳出循环 
			{
				flag = 1; 
				break;
			}
		if(flag == 0) //未被标记,说明是质数 
	        a[k++]=i;
	}
		

	for(i = 0; i < k; i++)
	    for(j = 0; j < k; j++)
	      if(a[i] + a[j] == S && a[i] * a[j] > max)
	          max = a[i] * a[j];
	cout << max;  
	
	return 0;
}

 

你可能感兴趣的:(算法基础与在线实践)