C趣味程序百例(09)要发就发
32.想发就发
“1898——想发就发”。请将截至1993年的所有质数排列在第一行,第二行的每个质数等于其右肩的质数之差。编程查一下:第二行有没有这样的连续整数,它们的和正好是1898?如果存在虚假的存在,这样的情况有多少?
第一行:2 3 5 7 11 13 17......1979年1987年1993年第二行......8 6
*问题分析及算法设计:
首先从数学上分析问题:[/br其中m[j]为:
m[j]=n[j+1]-n[j]。
那么第二行连续N个数之和为:
sum = m [1]+m [2]+m +...+m [j]
= (n [2]-n [1])+(n [3]。如果存在,第二行一定有需要的整数序列,它的和正好是1898。
解决等价问题比较简单。
根据分析,素数序列中不一定要包含2,因为任何一个素数和2的差一定是奇数,所以不需要考虑。
*程序和程序注释:
# include
# include
# define num 320
int num[num];/*存储截止到1993年的所有奇数*/
int fflag(int I);
void main()
{
int I,j,count = 0;
printf("第一行有以下素数序列:\ n ");
for(j=0,I = 3;i if(fflag(i))数[j++]= I;
for(j-;编号[j]> 1898;J-)/*从素数*/
{
中搜索1898 for(I = 0;数字[j]-数字[I]> 1898;i++);/*循环查找满足条件的素数*/
If(number[j]-number[I]= = 1898)/*如果两个素数之差为1898,则输出*/
printf ("(%d)。=, ...,% d.
}
}
[3]
位律师回复
0条评论