3520. 【NOIP2013模拟11.7B组】原根(math)
Description
Input
有且只有一个正整数m。
Output
以递增序依次输出模m的所有原根,每行输出一个原根。
如果不存在模m的原根,输出-1。
分析:暴力找原根即可。
代码
var
i,j,n,s:longint;
fl:boolean;
k:int64;
function gcd(a,b:longint):longint;
var
r:longint;
begin
r:=a mod b;
while r>0 do
begin
a:=b;
b:=r;
r:=a mod b;
end;
exit(b);
end;
begin
assign(input,'math.in');reset(input);
assign(output,'math.out');rewrite(output);
readln(n);
for i:=1 to n do
if gcd(n,i)=1 then inc(s);
if n=1 then
begin
writeln(1);
halt;
end;
for i:=1 to n-1 do
if gcd(n,i)=1 then
begin
k:=i;
for j:=1 to s do
begin
if (k=1) then
begin
if j=s then
begin
writeln(i);
fl:=true;
end;
break;
end;
k:=(k*i) mod n;
end;
end;
if not fl then writeln(-1);
close(input);close(output);
end.