先算出m以内与m互质(gcd(m,i)=1)的个数x,即为m的欧拉函数,再在这些互质的数中找出满足a^1到a^x-1每个数mod m都不为1,且a^x mod m为1,那么为m的原根。
functiongcd(x,y:longint):longint;
var
z:longint;
begin
z:=x mod y;
while z<>0dobegin
x:=y;
y:=z;
z:=x mod y;
end;
gcd:=y;
end;
var
l,i,j,x,m:longint;
c,f:boolean;
a:array[1..20000] of longint;
begin
assign(input,'math.in');reset(input);
assign(output,'math.out');rewrite(output);
readln(m);
l:=0;
if m=1thenbegin writeln(1);exit;end;
f:=false;
for i:=1to m doif gcd(m,i)=1thenbegin inc(l);a[l]:=i;end;
for i:=1to l dobegin
x:=1;
c:=true;
for j:=1to l-1dobegin
x:=(x*a[i]) mod m;
if x=1thenbegin c:=false;break;end;
end;
if (x*a[i] mod m=1)and(c) thenbegin writeln(a[i]);f:=true;end;
end;
ifnot f then writeln(-1);
close(input);close(output);
end.