| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
那里错了?label
chknext;
var
l,i,j:longint;
k:array[1..30]of longint;
p:array[1..9600]of longint;
nsize,size:longint;
function calcmod(moder:longint):longint;
var i,x:longint;
begin
x:=0;
for i:=nsize downto 1 do
begin
x:=x*10000+k[i];
x:=x mod moder;
end;
calcmod:=x;
end;
function iszero:boolean;
begin
iszero:=(nsize=1)and(k[nsize]=0);
end;
procedure getnum;
var s,ts:string;
c:char;
begin
s:='';nsize:=0;
repeat
read(c);
if not (('0'<=c)and(c<='9')) then break;
s:=s+c;
until false;
while length(s)>0 do
begin
ts:=copy(s,length(s)-3,4);
inc(nsize);
val(ts,k[nsize]);
s:=copy(s,1,length(s)-4);
end;
end;
function mod_exp(a,b,c:longint):longint;
var d,ans:int64;
begin
ans:=1;d:=a mod c;
while b>0 do
begin
if b mod 2=1 then ans:=ans*d mod c;
d:=d*d mod c;
b:=b shr 1;
end;
mod_exp:=ans;
end;
function miller_rabbin(x:longint):boolean;
begin
if (x<>2)and(mod_exp(2,x-1,x)<>1) then exit(false);
if (x<>3)and(mod_exp(3,x-1,x)<>1) then exit(false);
if (x<>5)and(mod_exp(5,x-1,x)<>1) then exit(false);
if (x<>7)and(mod_exp(7,x-1,x)<>1) then exit(false);
if (x<>11)and(mod_exp(11,x-1,x)<>1) then exit(false);
if (x<>13)and(mod_exp(13,x-1,x)<>1) then exit(false);
miller_rabbin:=true;
end;
begin
size:=1;
p[1]:=2;
i:=3;
while i<100000 do
begin
if miller_rabbin(i) then
begin
inc(size);
p[size]:=i;
end;
inc(i,2);
end;
inc(size);p[size]:=maxlongint;
repeat
chknext:
getnum;
readln(l);
if iszero and (l=0) then break;
i:=1;
while p[i]<l do
begin
if calcmod(p[i])=0 then
begin
writeln('BAD ',p[i]);
goto chknext;
end;
inc(i);
end;
writeln('GOOD');
until false;
end.
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator