pascal 问题

缔_境界 2周前 62 pascal
pascal 问题
最佳答案
var maxp,max,k:longint;n,s:string;len,i,j:integer;code,bj:word;beginreadln(n);len:=length(n);for i:=1 to len dofor j:=1 to len-i+1 dobegins:=copy(n,j,i);val(s,maxp,code);bj:=0;for k:=2 to trunc(sqrt(maxp)) doif maxp mod k=0 thenbeginbj:=1;break;end;if maxp=1 then bj:=1;if (bj=0)and(maxp>max) then max:=maxp;end;if max=0 then writeln('NO PRIMES')else writeln(max);end.直接枚举位数就行了 反正范围又不大 直接判断素数也不会超时
LennyAscetic 2周前 0条评论
其他回答
数据范围是10E啊,枚举要10秒,肯定过不了,所以要找个高效点的方法,如果你想要正解的话,就用质数公式吧;不过,如果没有限制提交的程序长度的话,我推荐一招猥琐的:先编一个程序,打出十亿以内所有素数,然后再新建一个程序,把这个质数表放到新程序里(这个过程也可以用程序完成),也就是通常说的“交表”,接着每次要用的时候用二分法查找,就非常方便了。如果你要正解,给你个质数公式:质数公式在公式A=(n-1)*(¦¦B2-1¦-(B2-1)¦)/2+2, 其中B=m(n+1)-(n!+1)中,m,n以自然数代入,所得的结果一定是素数。 这就是自欧几里德在<<几何原本>>证明了素数是无限多个后,多少世纪以来人们一直所寻找的能写出所有素数的公式! 不难看出,A一定是整数,且有: 若B=0,有A=n+1; 若B≠0, 有A=2. B≠0时,A已为素数,当B=0, 即m(n+1)-(n!+1)=0, 即m=(n!+1)/(n+1).在初等数论中有一著名的定理叫做"威尔逊定理", 可陈述为(n!+1)/(n+1)为整数的充要条件是n+1是素数。所以B=0时,m=(n!+1)/(n+1)为整数,故A=n+1必为素数。
270788779 2周前 0条评论
vari,j,k,n,m:longint;max:longint;s,ss:string;function su(o:longint):boolean;vari,j,k:longint;f:boolean;beginif o=1 then begin su:=true;exit;end;su:=false;f:=false;for i:=2 to trunc(sqrt(o))+1 doif o mod i =0 then beginf:=true;break;end;if f=true thensu:=true;end;beginmax:=0;read(s);j:=length(s);for i:=1 to j dofor k:=i to j dobeginss:=copy(s,i,k-i+1);val(ss,n,m);if n>max thenif su(n)=falsethen max:=n;end;if max=0 then writeln('NO PRIMES') else writeln(max);end.用的最朴素的素数验证,想提高效率造个素数表吧,只检测了样例通过,其他没测,不过应该问题也不大,再有错就自己改改吧
zxc9007 2周前 0条评论
相关问答