1405:质数的和与积
【题目描述】
两个质数的和是S,它们的积最大是多少?
【输入】
一个不大于10000的正整数S,为两个质数的和。
【输出】
一个整数,为两个质数的最大乘积。数据保证有解。
【输入样例】
50
【输出样例】
589
#include <stdio.h>
int zscj(int n);
int sushu(int n);
int main()
{
int i,n;
scanf("%d",&n);
printf("%d",zscj(n));
return 0;
}
int zscj(int n)
{
int i,a[10000],s,j=1;
for(i=2;i<=n/2;i++)
{
if(sushu(i)==1&&sushu(n-i)==1)
{
a[j]=i*(n-i);
j++;
}
}
for(i=1;i<j;i++)
{
if(a[i]>a[i+1])
{
a[i+1]=a[i];
}
}
return a[j];
}
int sushu(int n)
{
int i;
for(i=2;i<=n/2;i++)
{
if(n%i==0)
return 0;
}
return 1;
}
函数的递归
我们了解了函数的调用,函数的递归就是函数的自身调用。
例如:
#include<stdio.h>
#include<stdlib.h>
void fun(int n);
int main()
{
fun(1);
system("pause");
return 0;
}
void fun(int n)
{
if(n<5)
{
printf("%d\n",n);
fun(n+1);
printf("%d\n",n);
}
}
输出结果:
1
2
3
4
4
3
2
1
前一个 1 2 3 4 是第一个printf输出的结果,也就是函数递进去的过程。
后面的 4 3 2 1 是第二个printf输出的结果,也就是函数往回来归的过程。
函数自身调用自身结束(n == 5)后,函数返回到上一层的调用及:fun(4+1);此时的 n 等于 4 ;所以输出第五行的 4 。然后又归到上一层:fun(3+1);此时的 n 等于 3 ;所以输出第六行的 3 …
依次往回归,直到输出 1 后,返回到main函数,结束运行。