32.要發(fā)就發(fā)
“1898--要發(fā)就發(fā)”。請(qǐng)將不超過(guò)1993的所有素?cái)?shù)從小到大排成第一行,第二行上的每個(gè)素?cái)?shù)都等于它右肩上的素?cái)?shù)之差。編程求出:第二行數(shù)中是否存在這樣的若干個(gè)連續(xù)的整數(shù),它們的和恰好是1898?假好存在的話,又有幾種這樣的情況?
第一行:2 3 5 7 11 13 17......1979 1987 1993
第二行:1 2 2 4 2 4...... 8 6
*問(wèn)題分析與算法設(shè)計(jì):
首先從數(shù)學(xué)上分析該問(wèn)題:
假設(shè)第一行中的素?cái)?shù)為n[1]、n[2]、n[3]....n[i]、...第二行中的差值為m[1]、m[2]、m[3]...m[j]...。其中m[j]為:
m[j]=n[j+1]-n[j]。
則第二行連續(xù)N個(gè)數(shù)的和為:
SUM=m[1]+m[2]+m[3]+...+m[j]
=(n[2]-n[1])+(n[3]-n[2])+(n[4]-n[3])+...+(n[j+1]-n[j])
=n[j+1]-n[1]
由此題目就變成了:在不超過(guò)1993的所有素?cái)?shù)中是否存在這樣兩個(gè)素?cái)?shù),它們的差恰好是1898。若存在,則第二行中必有所需整數(shù)序列,其和恰為1898,。
對(duì)等價(jià)問(wèn)題的求解是比較簡(jiǎn)單的。
由分析可知,在素?cái)?shù)序列中不必包含2,因?yàn)槿我馑財(cái)?shù)與2的差一定為奇數(shù),所以不必考慮。
*程序與程序注釋:
#include
#include
#define NUM 320
int number[NUM]; /*存放不超過(guò)1993的全部奇數(shù)*/
int fflag(int i);
void main()
{
int i,j,count=0;
printf("there are follwing primes sequences in first row:\n");
for(j=0,i=3;i<=1993;i+=2) /*求出不超過(guò)1993的全部奇數(shù)*/
if(fflag(i)) number[j++]=i;
for(j--;number[j]>1898;j--) /*從的素?cái)?shù)開始向1898搜索*/
{
for(i=0;number[j]-number[i]>1898;i++); /*循環(huán)查找滿足條件的素?cái)?shù)*/
if(number[j]-number[i]==1898) /*若兩個(gè)素?cái)?shù)的差為1898,則輸出*/
printf("(%d).=,.....,%d\n",++count,number[i],number[j]);
}
}
“1898--要發(fā)就發(fā)”。請(qǐng)將不超過(guò)1993的所有素?cái)?shù)從小到大排成第一行,第二行上的每個(gè)素?cái)?shù)都等于它右肩上的素?cái)?shù)之差。編程求出:第二行數(shù)中是否存在這樣的若干個(gè)連續(xù)的整數(shù),它們的和恰好是1898?假好存在的話,又有幾種這樣的情況?
第一行:2 3 5 7 11 13 17......1979 1987 1993
第二行:1 2 2 4 2 4...... 8 6
*問(wèn)題分析與算法設(shè)計(jì):
首先從數(shù)學(xué)上分析該問(wèn)題:
假設(shè)第一行中的素?cái)?shù)為n[1]、n[2]、n[3]....n[i]、...第二行中的差值為m[1]、m[2]、m[3]...m[j]...。其中m[j]為:
m[j]=n[j+1]-n[j]。
則第二行連續(xù)N個(gè)數(shù)的和為:
SUM=m[1]+m[2]+m[3]+...+m[j]
=(n[2]-n[1])+(n[3]-n[2])+(n[4]-n[3])+...+(n[j+1]-n[j])
=n[j+1]-n[1]
由此題目就變成了:在不超過(guò)1993的所有素?cái)?shù)中是否存在這樣兩個(gè)素?cái)?shù),它們的差恰好是1898。若存在,則第二行中必有所需整數(shù)序列,其和恰為1898,。
對(duì)等價(jià)問(wèn)題的求解是比較簡(jiǎn)單的。
由分析可知,在素?cái)?shù)序列中不必包含2,因?yàn)槿我馑財(cái)?shù)與2的差一定為奇數(shù),所以不必考慮。
*程序與程序注釋:
#include
#include
#define NUM 320
int number[NUM]; /*存放不超過(guò)1993的全部奇數(shù)*/
int fflag(int i);
void main()
{
int i,j,count=0;
printf("there are follwing primes sequences in first row:\n");
for(j=0,i=3;i<=1993;i+=2) /*求出不超過(guò)1993的全部奇數(shù)*/
if(fflag(i)) number[j++]=i;
for(j--;number[j]>1898;j--) /*從的素?cái)?shù)開始向1898搜索*/
{
for(i=0;number[j]-number[i]>1898;i++); /*循環(huán)查找滿足條件的素?cái)?shù)*/
if(number[j]-number[i]==1898) /*若兩個(gè)素?cái)?shù)的差為1898,則輸出*/
printf("(%d).=,.....,%d\n",++count,number[i],number[j]);
}
}