未分类题

阅读以下说明和流程图8-11,完成程序(n)处的语句写在对应栏内。
[说明]
对于数学上一个猜想:任何自然数平方的36倍等于两对孪生素数的和。初始的情形如下:
12×36=(5+7)+(11+13)
22×36=(29+31)+(41+43)
32×36=(11+13)+(149+151)
再往下,N取4,5,6,时,只要N不太大,也都可以找到N(上标)2×36等于两对孪生素数的和。但是当N是一个任意的正整数时,证明N2×36总是等于两对孪生素数的和,这还是一个目前尚未解决的问题。甚至当考察的数较大时,找出一组符合条件的两对孪生素数都是计算量相当大的工作。每尝试一次,都要作4次是否是素数的判断,要作许多次的尝试,才可能找到一组解。下面流程图设计了一种优化算法来对这个猜想进行验证。仔细阅读流程图8-11,完成程序部分。

[程序部分]
main ()
{
int t, i, j, prime_index; is_p rime:
long n, p, p1, p2, p3, p4, s, s1;
long primes [ 16000 ];
for (n=1; n<98; ++n)
{
t=0;
s= n* n* 36;
prime_index= 2;
primes[0]=2; primes[1]=3;
for (p=5: p<=s/2; p=p+2)
{
is_p rime= 1;
for ( i=1;(1)++i)
if ( p%primes [i] = = 0 ) is_p rime= 0;
if ( is_p rime)
{
(2)
}
}
for ( i=1; (3)++i)
{
(4)
if ( p2=p1+ 2 )
{
s1=s- (p1+p2)
p3=sl/2-1; p4=p3+2:
for ( j=0; j<=prime_index-1; ++j )
if ((5))
{
printf ( '%d* % d*36= (%d+ %d) + (%d+%d) /n', / n,n, p1, p2, p3, p4 ) ;
++t;
}
}
}
if ( t! = 0 ) printf ('%d/n', t )
else
printf ( '%d* %d*36=no so lution/n ', n, n ) ; }
}
}

A.shangxueba.cn/images/ct_crmsdxm_crmsdxzuti_00157(20093).jpg'

【参考答案】

(1)is_prime &&(p/primes[i]>=primes[i]);(2)primes[prime_index......

(↓↓↓ 点击下方‘点击查看答案’看完整答案 ↓↓↓)
热门 试题

未分类题
阅读下列程序说明和C代码,将应填人(n)处的字句写在对应栏内。[程序5说明]下列文法可用来描述化学分子式的书写规则(例如,A12(CO3)3”Cu(OH)2):λ→β βλβ→δ δnδ→ξ ξθ (λ)其中:λ是—个分子式;δ或是一个元素,或是一个带括号的(子)分子式,元素或是一个大写字母(记为ξ),或是一个大写字母和一个小写字母(记为ξθ)β或是一个δ,或是在δ之后接上一个整数n,δn表示β有n个δ的元素或(子)分子式。—个完整的分子式由若干个β组成。当然一个正确的分子式除符合上述文法规则外,还应满足分子式本身的语义要求。下面的程序输入分子式,按上述文法分析分子式,并计算出该分子式的分子量。例如:元素H的原子量是1,元素O的原子量是16。输入分子式H2O,程序计算出它的分子量为18 (1×2+16)。程序中各元素的名及它的原子量从文件atom.dat中读入。[程序5]include < stdio. h >include < string. h >define MAXN 300define GMLEN 30struct elem { char name[ ]; * 元素名* double v; *原子量* } nTbl [MAXN];char cmStr [GMLEN], * pos;int c;FILE * fp;double factor( );double atom( ) * 处理文法符号δ* {char w [3];int i; double num;while((c = * pos++) =='||c ==' t'); *略过空白字符* if(c == ' n') return 0.0;if(c>='A' && C <='Z') { *将元素名存入W * w[i =0]=c;c= * pos ++if(c >='a'&& c <='z')w[ ++i] =c;else pos--;w[ ++i] =' 0',for(i =0;nTbl [i]. v >0.0;i ++)if(strcmp (w,nTbl[i]. name) ==0) return nTbl [i]. v;printf (' n元素表中没有所输入的无素: t%s n',w); retur n - 1.0;} elseif (c = ='(') {if((num=(1)) <0.0)return -l.0; *包括可能为空的情况* if( * pos ++ ! = ')') { printf (' 分子式中括号不匹配! n') ;return - 1.0; }return num;}printf ('分子式中存在非法字符: t%c n' ,c);return - 1.0;}double mAtom( ) * 处理文法符号β* { double num ;int n = ];if((num=(2)) <0.0)return-l.0;c= *pos++;if(c >='O'&&c <='9') {n = 0; while(c > = 0&&c < ='9'){n=(3);c= *poss ++;}}pos --;return num * n;}double factor( ) *处理文法符号λ* { double num =0.0,d;if(( hum = mAtom ( )) < 0.0) return - 1.0;while( * pos >= 'A'&& * pos <= 'Z'||* pos == '(') {if((d=(4)) <0.0)return-1.0;(5);} return num;void main( ){ char fname[ ] ='atom. dst'; *元素名及其原子量文件* int i;double num;if((fp=fopon(fname,'r' )) == NULL) { *以读方式打开正文文件* prinff('Can net open%s file. n' ,fname) ;return *程序非正常结束 * i=0;while(i < MAXN&&fscanf (fp,' %s%lf,bTbl[i]. name,&nTbl[i]. v) ==2)i++;fclose(fp) ;nTbl[i]. v =-1.0;while(1) [ *输入分子式和计算分子量循环,直至输入空行结束* printf(' n 输入分子式! (空行结束) n' ) ;gets(cmStr);pos = cmStr;if(cmStr[0] == ' 0') break;if( (num = later( ) ) > 0.0)if( * pos! = ' 0')printf('分子式不完整! n' );else printf('分子式的分子量为%f n',num);}