解题报告 sgu 102

译题:

给定一个整数n,寻找有多少个不大于n的数与其互质。互质是指两个数的最大公约数是1。

输入
1个整数n

输出
输出答案

样例输入
9

样例输出
6

 

 

额,首先,这个题暴力可做。。。。。。。好像这就是它的通过率如此高的原因。

欧拉函数:

n=p[1]^t[1]*p[2]^t[2]*p[3]^t[3]........

p[1],p[2],p[3].....为质因数。

f[n]=n*((p[1]-1)/p[1])*((p[2]-1)/p[2])*((p[3]-1)/p[3])......

 

 

//sgu 102
program ACRush;
var n:longint;
v:array[0..10010]of boolean;
i,j,k,ans:longint;
begin
readln(n);
if n=1 then
begin
writeln(1);
halt;
end;
for i:=2 to 10010 do
if not v[i] then
begin
j:=i;
while j+i<=10010 do
begin
j:=j+i;
v[j]:=true;
end;
end;

ans:=n;
k:=n;
for i:=2 to n do
if not v[i] then
if n mod i=0 then
begin
ans:=ans div i;
ans:=ans*(i-1);
end;
writeln(ans);
end.

posted @ 2012-05-16 17:27  木小漾  阅读(180)  评论(0编辑  收藏  举报