1405:質(zhì)數(shù)的和與積
【題目描述】
兩個(gè)質(zhì)數(shù)的和是S,它們的積最大是多少?
【輸入】
一個(gè)不大于10000的正整數(shù)S,為兩個(gè)質(zhì)數(shù)的和。
【輸出】
一個(gè)整數(shù),為兩個(gè)質(zhì)數(shù)的最大乘積。數(shù)據(jù)保證有解。
【輸入樣例】
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;
}
函數(shù)的遞歸
我們了解了函數(shù)的調(diào)用,函數(shù)的遞歸就是函數(shù)的自身調(diào)用。
例如:
#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);
}
}
輸出結(jié)果:
1
2
3
4
4
3
2
1
前一個(gè) 1 2 3 4 是第一個(gè)printf輸出的結(jié)果,也就是函數(shù)遞進(jìn)去的過(guò)程。
后面的 4 3 2 1 是第二個(gè)printf輸出的結(jié)果,也就是函數(shù)往回來(lái)歸的過(guò)程。
函數(shù)自身調(diào)用自身結(jié)束(n == 5)后,函數(shù)返回到上一層的調(diào)用及:fun(4+1);此時(shí)的 n 等于 4 ;所以輸出第五行的 4 。然后又歸到上一層:fun(3+1);此時(shí)的 n 等于 3 ;所以輸出第六行的 3 …
依次往回歸,直到輸出 1 后,返回到main函數(shù),結(jié)束運(yùn)行。