Cousin primes: Difference between revisions
Content added Content deleted
(Created page with "{{Draft task}} ;Task: n and n+4 are cousin primes if they are primes. <br> Show the cousin primes for 1 < n < 1000 =={{header|Ring}}== <lang ring> load "stdlib.ring" see "w...") |
(added Pascal) |
||
Line 3: | Line 3: | ||
;Task: n and n+4 are cousin primes if they are primes. |
;Task: n and n+4 are cousin primes if they are primes. |
||
<br> Show the cousin primes for 1 < n < 1000 |
<br> Show the cousin primes for 1 < n < 1000 |
||
=={{header|Pascal}}== |
|||
{{works with|Free Pascal}}Sieving only odd numbers. |
|||
<lang pascal>program CousinPrimes; |
|||
//Free Pascal Compiler version 3.2.1 [2020/11/03] for x86_64fpc |
|||
{$IFDEF FPC} |
|||
{$MODE DELPHI} |
|||
{$Optimization ON,ALL} |
|||
{$ELSE} |
|||
{$APPTYPE CONSOLE} |
|||
{$ENDIF} |
|||
const |
|||
MAXZAHL = 1000;// > 3 |
|||
MAXLIMIT = (MAXZAHL-1) DIV 2; |
|||
//estimate |
|||
CountOfPrimes = trunc(MAXZAHL/(ln(MAXZAHL)-1.08))+100; |
|||
type |
|||
tChkprimes = array[0..MAXLIMIT] of byte;//prime == 1 , nonprime == 0 |
|||
var |
|||
Chkprimes:tChkprimes; |
|||
primes : array[0..CountOfPrimes]of Uint32;//here starting with 3 |
|||
primeCount:NativeInt; |
|||
procedure InitPrimes; |
|||
//sieve of eratothenes |
|||
var |
|||
i,j : NativeInt; |
|||
begin |
|||
// i = 2*j+1 |
|||
fillchar(Chkprimes,SizeOf(tChkprimes),#1); |
|||
Chkprimes[0] := 0; |
|||
i := 1; |
|||
repeat |
|||
if Chkprimes[(i-1) DIV 2] <> 0 then |
|||
Begin |
|||
j := (i*i-1) DIV 2; |
|||
if j> MAXLIMIT then |
|||
break; |
|||
repeat |
|||
Chkprimes[j]:= 0; |
|||
inc(j,i); |
|||
until j> MAXLIMIT; |
|||
end; |
|||
inc(i,2); |
|||
until false; |
|||
j := 0; |
|||
For i := 1 to MAXLIMIT do |
|||
IF Chkprimes[i]<>0 then |
|||
Begin |
|||
primes[j] := 2*i+1; |
|||
inc(j); |
|||
end; |
|||
// writeln('prime count ',j+1,' til ',MAXZAHL); //count "2" |
|||
primeCount := j-1; |
|||
IF CountOfPrimes-primeCount < 0 then |
|||
begin |
|||
writeln(' Need more space for primes ', primeCount-CountOfPrimes); |
|||
HALT(-243); |
|||
end; |
|||
end; |
|||
var |
|||
i,cnt : NativeInt; |
|||
BEGIN |
|||
InitPrimes; |
|||
//only exception, that the index difference is greater 1 |
|||
write(primes[0]:3,':',primes[2]:3,' '); |
|||
cnt := 1; |
|||
For i := 1 to primeCount do |
|||
IF primes[i]-primes[i-1] = 4 then |
|||
Begin |
|||
write(primes[i-1]:3,':',primes[i]:3,' '); |
|||
inc(cnt); |
|||
If cnt MOD 6 = 0 then |
|||
writeln; |
|||
end; |
|||
writeln; |
|||
writeln(cnt,' cousin primes found'); |
|||
END. |
|||
</lang> |
|||
{{out}} |
|||
<pre> 3: 7 7: 11 13: 17 19: 23 37: 41 43: 47 |
|||
67: 71 79: 83 97:101 103:107 109:113 127:131 |
|||
163:167 193:197 223:227 229:233 277:281 307:311 |
|||
313:317 349:353 379:383 397:401 439:443 457:461 |
|||
463:467 487:491 499:503 613:617 643:647 673:677 |
|||
739:743 757:761 769:773 823:827 853:857 859:863 |
|||
877:881 883:887 907:911 937:941 967:971 |
|||
41 cousin primes found</pre> |
|||
=={{header|Ring}}== |
=={{header|Ring}}== |
||
<lang ring> |
<lang ring> |
Revision as of 11:38, 18 March 2021
Cousin primes is a draft programming task. It is not yet considered ready to be promoted as a complete task, for reasons that should be found in its talk page.
- Task
- n and n+4 are cousin primes if they are primes.
Show the cousin primes for 1 < n < 1000
Pascal
Sieving only odd numbers.
<lang pascal>program CousinPrimes; //Free Pascal Compiler version 3.2.1 [2020/11/03] for x86_64fpc {$IFDEF FPC}
{$MODE DELPHI} {$Optimization ON,ALL}
{$ELSE}
{$APPTYPE CONSOLE}
{$ENDIF} const
MAXZAHL = 1000;// > 3 MAXLIMIT = (MAXZAHL-1) DIV 2; //estimate CountOfPrimes = trunc(MAXZAHL/(ln(MAXZAHL)-1.08))+100;
type
tChkprimes = array[0..MAXLIMIT] of byte;//prime == 1 , nonprime == 0
var
Chkprimes:tChkprimes; primes : array[0..CountOfPrimes]of Uint32;//here starting with 3 primeCount:NativeInt;
procedure InitPrimes; //sieve of eratothenes var
i,j : NativeInt;
begin
// i = 2*j+1 fillchar(Chkprimes,SizeOf(tChkprimes),#1); Chkprimes[0] := 0; i := 1; repeat if Chkprimes[(i-1) DIV 2] <> 0 then Begin j := (i*i-1) DIV 2; if j> MAXLIMIT then break; repeat Chkprimes[j]:= 0; inc(j,i); until j> MAXLIMIT; end; inc(i,2); until false;
j := 0; For i := 1 to MAXLIMIT do IF Chkprimes[i]<>0 then Begin primes[j] := 2*i+1; inc(j); end;
// writeln('prime count ',j+1,' til ',MAXZAHL); //count "2"
primeCount := j-1;
IF CountOfPrimes-primeCount < 0 then begin writeln(' Need more space for primes ', primeCount-CountOfPrimes); HALT(-243); end;
end; var
i,cnt : NativeInt;
BEGIN
InitPrimes; //only exception, that the index difference is greater 1 write(primes[0]:3,':',primes[2]:3,' '); cnt := 1; For i := 1 to primeCount do IF primes[i]-primes[i-1] = 4 then Begin write(primes[i-1]:3,':',primes[i]:3,' '); inc(cnt); If cnt MOD 6 = 0 then writeln; end; writeln; writeln(cnt,' cousin primes found');
END. </lang>
- Output:
3: 7 7: 11 13: 17 19: 23 37: 41 43: 47 67: 71 79: 83 97:101 103:107 109:113 127:131 163:167 193:197 223:227 229:233 277:281 307:311 313:317 349:353 379:383 397:401 439:443 457:461 463:467 487:491 499:503 613:617 643:647 673:677 739:743 757:761 769:773 823:827 853:857 859:863 877:881 883:887 907:911 937:941 967:971 41 cousin primes found
Ring
<lang ring> load "stdlib.ring"
see "working..." + nl see "cousin primes are:" + nl
ind = 0 row = 0 limit = 1000
for n = 1 to limit
if isprime(n) and isprime(n+4) row = row + 1 see "(" + n + ", " + (n+4) + ") " if row%5 = 0 see nl ok ok
next
see nl + "done..." + nl </lang>
- Output:
working... cousin primes are: (3, 7) (7, 11) (13, 17) (19, 23) (37, 41) (43, 47) (67, 71) (79, 83) (97, 101) (103, 107) (109, 113) (127, 131) (163, 167) (193, 197) (223, 227) (229, 233) (277, 281) (307, 311) (313, 317) (349, 353) (379, 383) (397, 401) (439, 443) (457, 461) (463, 467) (487, 491) (499, 503) (613, 617) (643, 647) (673, 677) (739, 743) (757, 761) (769, 773) (823, 827) (853, 857) (859, 863) (877, 881) (883, 887) (907, 911) (937, 941) (967, 971) done...