生生世世爱吴雨霏现场:求救Pascal超级素数

来源:百度文库 编辑:中科新闻网 时间:2024/04/29 23:16:22
问题描述:

超级素数。一个素数如果从个位开始,依次去掉一位数字、两位数字、三未数字。。。。。
之后,所剩下的数仍然是一个素数,则称该素数为一个超级素数。例如:2333是一个素数,
233,23,2 也都是素数,所以2333是一个四位的超级素数。请设计一个程序判断一个整数是否是素数。从输入文件sushu.in读入一个整数,如果该整数是超级素数,则在输出文件
sushu.out 输出yes, 若不是超级素数则输出no
例如:
输入:
2333
输出
yes
输入:142
输出:no
有没有高手会做啊?\
999小弟的命吧~~~

首先你必需说明这个整数的范围,暂定为Longint
var n:longint;
b:boolean;
function IsPrime(n:longint) as boolean
begin
var i,c:longint;
c:=round(sqrt(n));
for i:=2 to c do
if n mod i=0 then
begin
IsPrime:=false;
exit;
end;
IsPrime=true;
end;
begin
assign(input,'sushu.in');reset(input);
assign(output,'sushu.out');rewrite(output);
while not eof(input) do begin
readln(n);
while n>0 do begin
b:=IsPrime(n);
if b=false then begin
writeln('no');
break;
end;
n:=n div 10;
end;
if n=0 then writeln('yes');
end;
close(output);
end.

素数是指只能被1和自己整除的数吧,我不太记得了,如果是那就是这样的。Pascal我不会,就用VB6跟你写吧,算法都写好了,文件操作自己应该可以解决吧
在窗体上创建一个按钮和一个文本框,双击按钮,为其添加动作
Private Sub Command1_Click
If IsAllSuShu(Text1.Text) Then MsgBox "yes" Else MsgBox "no"
End Sub

Private Function IsSuShu(ByVal Number As Long) As Boolean
Dim i as Integer
Dim Total as Long
For i=2 to Number-1
If Number/i=Int(Number/i) Then Total=Total+1
Next i
If Total>0 Then IsSuShu=True Else IsSuShu=False
End Function

Private Function IsAllSuShu(ByVal Number As String) As Boolean
Dim i as Integer
For i=Len(Number) To 2 Step -1
If Not IsSuShu(Val(Mid(Number,1,i-1))) Then IsAllSuShu=False:Exit Function
Next A
IsAllSuShu=True
End Function

program super_prime;
type tiao=record
s:array[1..10000] of longint;
t:integer;
end;
const fx:array[1..52] of integer=(2,3,5,7,23,29,31,37,53,59,71,73,79,233,239,293,299,311,313,317,319,373,377,379,533,593,599,713,719,731,733,737,739,793,797,799,2333,2339,2393,2399,2939,3119,3137,3733,3739,3793,3797,5939,7193,7331,7333,7393);
f:array[1..4] of integer=(1,3,7,9);
var a:array[1..10000] of integer;
biao:array[1..8] of tiao;
k,i,j,m,n,l,q,p:longint;
judge:boolean;
function isprime:boolean;
var exist:boolean;
begin
exist:=false;
isprime:=true;
if l<=8945 then begin
for i:=1 to 8945 do
if a[i]=l then
exist:=true;
if not exist then isprime:=false;
end
else begin
p:=1;
q:=trunc(sqrt(l));
while a[p]<q do
begin
if l mod a[p]=0 then begin isprime:=false ;exit;end;
p:=p+1;
end;
end;
end;
begin
read(n);
biao[1].t:=4;biao[2].t:=9;biao[3].t:=23;biao[4].t:=16;
for i:=1 to 4 do
biao[1].s[i]:=fx[i];
for i:=1 to 9 do
biao[2].s[i]:=fx[i+4];
for i:=1 to 23 do
biao[3].s[i]:=fx[i+13];
for i:=1 to 16 do
biao[4].s[i]:=fx[i+36];
if n<=4 then begin
for i:=1 to biao[n].t do
write(biao[n].s[i],' ') end
else begin
a[1]:=2;a[2]:=3;a[3]:=5;
k:=6;m:=4;
repeat
judge:=true;
i:=1;
l:=trunc(sqrt(k));
while a[i]<l do begin
if k mod a[i]=0 then judge:=false;
i:=i+1; end;
if judge then begin a[m]:=k;m:=m+1; end;
k:=k+1;
until k>8945;
i:=5;
repeat
judge:=false;
for k:=1 to biao[i-1].t do
for m:=1 to 4 do begin
l:=biao[i-1].s[k]*10+f[m];
if isprime then begin
biao[i].t:=biao[i].t+1;
biao[i].s[biao[i].t]:=l;
end;
end;
i:=i+1;
until i>n;
for i:=1 to biao[n].t do
write(biao[n].s[i],' ');
end;
end.

program super_prime;
type tiao=record
s:array[1..10000] of longint;
t:integer;
end;
const fx:array[1..52] of integer=(2,3,5,7,23,29,31,37,53,59,71,73,79,233,239,293,299,311,313,317,319,373,377,379,533,593,599,713,719,731,733,737,739,793,797,799,2333,2339,2393,2399,2939,3119,3137,3733,3739,3793,3797,5939,7193,7331,7333,7393);
f:array[1..4] of integer=(1,3,7,9);
var a:array[1..10000] of integer;
biao:array[1..8] of tiao;
k,i,j,m,n,l,q,p:longint;
judge:boolean;
function isprime:boolean;
var exist:boolean;
begin
exist:=false;
isprime:=true;
if l<=8945 then begin
for i:=1 to 8945 do
if a[i]=l then
exist:=true;
if not exist then isprime:=false;
end
else begin
p:=1;
q:=trunc(sqrt(l));
while a[p]<q do
begin
if l mod a[p]=0 then begin isprime:=false ;exit;end;
p:=p+1;
end;
end;
end;
begin
read(n);
biao[1].t:=4;biao[2].t:=9;biao[3].t:=23;biao[4].t:=16;
for i:=1 to 4 do
biao[1].s[i]:=fx[i];
for i:=1 to 9 do
biao[2].s[i]:=fx[i+4];
for i:=1 to 23 do
biao[3].s[i]:=fx[i+13];
for i:=1 to 16 do
biao[4].s[i]:=fx[i+36];
if n<=4 then begin
for i:=1 to biao[n].t do
write(biao[n].s[i],' ') end
else begin
a[1]:=2;a[2]:=3;a[3]:=5;
k:=6;m:=4;
repeat
judge:=true;
i:=1;
l:=trunc(sqrt(k));
while a[i]<l do begin
if k mod a[i]=0 then judge:=false;
i:=i+1; end;
if judge then begin a[m]:=k;m:=m+1; end;
k:=k+1;
until k>8945;
i:=5;
repeat
judge:=false;
for k:=1 to biao[i-1].t do
for m:=1 to 4 do begin
l:=biao[i-1].s[k]*10+f[m];
if isprime then begin
biao[i].t:=biao[i].t+1;
biao[i].s[biao[i].t]:=l;
end;
end;
i:=i+1;
until i>n;
for i:=1 to biao[n].t do
write(biao[n].s[i],' ');
end;
end.
可以看看这两个程序