Data update
This commit is contained in:
parent
4d5544505c
commit
4924dd0264
3073 changed files with 55820 additions and 4408 deletions
46
Task/Totient-function/Agena/totient-function.agena
Normal file
46
Task/Totient-function/Agena/totient-function.agena
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
scope # Totient function
|
||||
|
||||
# returns the number of integers k where 1 <= k <= n that are mutually prime to n
|
||||
local procedure totient( n :: number ) :: number
|
||||
if n < 3 then result := 1
|
||||
elif n = 3 then result := 2
|
||||
else
|
||||
result := n;
|
||||
local v, i := n, 2;
|
||||
while i * i <= v do
|
||||
if v mod i = 0 then
|
||||
while v mod i = 0 do v \:= i od;
|
||||
result -:= result \ i
|
||||
fi;
|
||||
if i = 2 then
|
||||
i := 1
|
||||
fi;
|
||||
i +:= 2
|
||||
od;
|
||||
if v > 1 then result -:= result \ v fi;
|
||||
fi;
|
||||
return result
|
||||
end;
|
||||
|
||||
# show the totient function values for the first 25 integers
|
||||
io.write( " n phi(n) remarks\n" );
|
||||
for n to 25 do
|
||||
local constant tn := totient( n );
|
||||
printf( "%2d: %5d%s\n", n, tn, if tn = n - 1 and tn <> 0 then " n is prime" else "" fi )
|
||||
od;
|
||||
|
||||
# use the totient function to count primes
|
||||
local n100, n1_000, n10_000, n100_000 := 0, 0, 0, 0;
|
||||
for n to 100_000 do
|
||||
if totient( n ) = n - 1 then
|
||||
if n <= 100 then n100 +:= 1 fi;
|
||||
if n <= 1000 then n1_000 +:= 1 fi;
|
||||
if n <= 10000 then n10_000 +:= 1 fi;
|
||||
if n <= 100000 then n100_000 +:= 1 fi
|
||||
fi
|
||||
od;
|
||||
printf( "There are %6d primes below 100\n", n100 );
|
||||
printf( "There are %6d primes below 1 000\n", n1_000 );
|
||||
printf( "There are %6d primes below 10 000\n", n10_000 );
|
||||
printf( "There are %6d primes below 100 000\n", n100_000 )
|
||||
end
|
||||
Loading…
Add table
Add a link
Reference in a new issue