Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
65
Task/Totient-function/Pascal/totient-function-1.pas
Normal file
65
Task/Totient-function/Pascal/totient-function-1.pas
Normal file
|
|
@ -0,0 +1,65 @@
|
|||
{$IFDEF FPC}
|
||||
{$MODE DELPHI}
|
||||
{$IFEND}
|
||||
function gcd_mod(u, v: NativeUint): NativeUint;inline;
|
||||
//prerequisites u > v and u,v > 0
|
||||
var
|
||||
t: NativeUInt;
|
||||
begin
|
||||
repeat
|
||||
t := u;
|
||||
u := v;
|
||||
v := t mod v;
|
||||
until v = 0;
|
||||
gcd_mod := u;
|
||||
end;
|
||||
|
||||
function Totient(n:NativeUint):NativeUint;
|
||||
var
|
||||
i : NativeUint;
|
||||
Begin
|
||||
result := 1;
|
||||
For i := 2 to n do
|
||||
inc(result,ORD(GCD_mod(n,i)=1));
|
||||
end;
|
||||
|
||||
function CheckPrimeTotient(n:NativeUint):Boolean;inline;
|
||||
begin
|
||||
result := (Totient(n) = (n-1));
|
||||
end;
|
||||
|
||||
procedure OutCountPrimes(n:NativeUInt);
|
||||
var
|
||||
i,cnt : NativeUint;
|
||||
begin
|
||||
cnt := 0;
|
||||
For i := 1 to n do
|
||||
inc(cnt,Ord(CheckPrimeTotient(i)));
|
||||
writeln(n:10,cnt:8);
|
||||
end;
|
||||
|
||||
procedure display(n:NativeUint);
|
||||
var
|
||||
idx,phi : NativeUint;
|
||||
Begin
|
||||
if n = 0 then
|
||||
EXIT;
|
||||
writeln('number n':5,'Totient(n)':11,'isprime':8);
|
||||
For idx := 1 to n do
|
||||
Begin
|
||||
phi := Totient(idx);
|
||||
writeln(idx:4,phi:10,(phi=(idx-1)):12);
|
||||
end
|
||||
end;
|
||||
var
|
||||
i : NativeUint;
|
||||
Begin
|
||||
display(25);
|
||||
|
||||
writeln('Limit primecount');
|
||||
i := 100;
|
||||
repeat
|
||||
OutCountPrimes(i);
|
||||
i := i*10;
|
||||
until i >100000;
|
||||
end.
|
||||
68
Task/Totient-function/Pascal/totient-function-2.pas
Normal file
68
Task/Totient-function/Pascal/totient-function-2.pas
Normal file
|
|
@ -0,0 +1,68 @@
|
|||
function totient(n:NativeUInt):NativeUInt;
|
||||
const
|
||||
//delta of numbers not divisible by 2,3,5 (0_1+6->7+4->11 ..+6->29+2->3_1
|
||||
delta : array[0..7] of NativeUint = (6,4,2,4,2,4,6,2);
|
||||
var
|
||||
i, quot,idx: NativeUint;
|
||||
Begin
|
||||
// div mod by constant is fast.
|
||||
//i = 2
|
||||
result := n;
|
||||
if (2*2 <= n) then
|
||||
Begin
|
||||
IF not(ODD(n)) then
|
||||
Begin
|
||||
// remove numbers with factor 2,4,8,16, ...
|
||||
while not(ODD(n)) do
|
||||
n := n DIV 2;
|
||||
//remove count of multiples of 2
|
||||
dec(result,result DIV 2);
|
||||
end;
|
||||
end;
|
||||
//i = 3
|
||||
If (3*3 <= n) AND (n mod 3 = 0) then
|
||||
Begin
|
||||
repeat
|
||||
quot := n DIV 3;
|
||||
IF n <> quot*3 then
|
||||
BREAK
|
||||
else
|
||||
n := quot;
|
||||
until false;
|
||||
dec(result,result DIV 3);
|
||||
end;
|
||||
//i = 5
|
||||
If (5*5 <= n) AND (n mod 5 = 0) then
|
||||
Begin
|
||||
repeat
|
||||
quot := n DIV 5;
|
||||
IF n <> quot*5 then
|
||||
BREAK
|
||||
else
|
||||
n := quot;
|
||||
until false;
|
||||
dec(result,result DIV 5);
|
||||
end;
|
||||
i := 7;
|
||||
idx := 1;
|
||||
//i = 7,11,13,17,19,23,29, ...49 ..
|
||||
while i*i <= n do
|
||||
Begin
|
||||
quot := n DIV i;
|
||||
if n = quot*i then
|
||||
Begin
|
||||
repeat
|
||||
IF n <> quot*i then
|
||||
BREAK
|
||||
else
|
||||
n := quot;
|
||||
quot := n DIV i;
|
||||
until false;
|
||||
dec(result,result DIV i);
|
||||
end;
|
||||
i := i + delta[idx];
|
||||
idx := (idx+1) AND 7;
|
||||
end;
|
||||
if n> 1 then
|
||||
dec(result,result div n);
|
||||
end;
|
||||
Loading…
Add table
Add a link
Reference in a new issue