Totient function: Difference between revisions
Content added Content deleted
Not a robot (talk | contribs) (Add BCPL) |
Not a robot (talk | contribs) (Add Draco) |
||
Line 2,136: | Line 2,136: | ||
=={{header|Delphi}}== |
=={{header|Delphi}}== |
||
See [https://rosettacode.org/wiki/Totient_function#Pascal Pascal]. |
See [https://rosettacode.org/wiki/Totient_function#Pascal Pascal]. |
||
=={{header|Draco}}== |
|||
{{trans|C}} |
|||
<syntaxhighlight lang="draco">proc totient(word n) word: |
|||
word tot, i; |
|||
tot := n; |
|||
i := 2; |
|||
while i*i <= n do |
|||
if n%i = 0 then |
|||
while n%i = 0 do n := n/i od; |
|||
tot := tot - tot/i |
|||
fi; |
|||
if i=2 then i:=1 fi; |
|||
i := i+2 |
|||
od; |
|||
if n>1 then |
|||
tot - tot/n |
|||
else |
|||
tot |
|||
fi |
|||
corp |
|||
proc main() void: |
|||
word count, n, tot; |
|||
bool prime; |
|||
count := 0; |
|||
writeln(" N Totient Prime"); |
|||
for n from 1 upto 25 do |
|||
tot := totient(n); |
|||
prime := n-1 = tot; |
|||
if prime then count := count+1 fi; |
|||
writeln(n:2, " ", tot:7, " ", if prime then " Yes" else " No" fi) |
|||
od; |
|||
writeln("Number of primes up to ",25:6,": ",count:4); |
|||
for n from 25 upto 10000 do |
|||
if totient(n) = n-1 then count := count+1 fi; |
|||
if n=100 or n=1000 or n=10000 then |
|||
writeln("Number of primes up to ",n:6,": ",count:4) |
|||
fi |
|||
od |
|||
corp</syntaxhighlight> |
|||
{{out}} |
|||
<pre> N Totient Prime |
|||
1 1 No |
|||
2 1 Yes |
|||
3 2 Yes |
|||
4 2 No |
|||
5 4 Yes |
|||
6 2 No |
|||
7 6 Yes |
|||
8 4 No |
|||
9 6 No |
|||
10 4 No |
|||
11 10 Yes |
|||
12 4 No |
|||
13 12 Yes |
|||
14 6 No |
|||
15 8 No |
|||
16 8 No |
|||
17 16 Yes |
|||
18 6 No |
|||
19 18 Yes |
|||
20 8 No |
|||
21 12 No |
|||
22 10 No |
|||
23 22 Yes |
|||
24 8 No |
|||
25 20 No |
|||
Number of primes up to 25: 9 |
|||
Number of primes up to 100: 25 |
|||
Number of primes up to 1000: 168 |
|||
Number of primes up to 10000: 1229</pre> |
|||
=={{header|Dyalect}}== |
=={{header|Dyalect}}== |