Find prime numbers of the form n*n*n+2: Difference between revisions
(Added Go) |
(Added C) |
||
Line 3: | Line 3: | ||
;Task: Find prime numbers of form <big> n<sup>''3''</sup>+2</big>, where 0 < n < 200 |
;Task: Find prime numbers of form <big> n<sup>''3''</sup>+2</big>, where 0 < n < 200 |
||
<br> |
<br> |
||
=={{header|C}}== |
|||
{{trans|Wren}} |
|||
<lang c>#include <stdio.h> |
|||
#include <stdbool.h> |
|||
#include <locale.h> |
|||
bool isPrime(int n) { |
|||
int d; |
|||
if (n < 2) return false; |
|||
if (!(n%2)) return n == 2; |
|||
if (!(n%3)) return n == 3; |
|||
d = 5; |
|||
while (d*d <= n) { |
|||
if (!(n%d)) return false; |
|||
d += 2; |
|||
if (!(n%d)) return false; |
|||
d += 4; |
|||
} |
|||
return true; |
|||
} |
|||
int main() { |
|||
int n, p; |
|||
const int limit = 200; |
|||
setlocale(LC_ALL, ""); |
|||
for (n = 1; n < limit; ++n) { |
|||
p = n*n*n + 2; |
|||
if (isPrime(p)) { |
|||
printf("n = %3d => n³ + 2 = %'9d\n", n, p); |
|||
} |
|||
} |
|||
return 0; |
|||
}</lang> |
|||
{{out}} |
|||
<pre> |
|||
n = 1 => n³ + 2 = 3 |
|||
n = 3 => n³ + 2 = 29 |
|||
n = 5 => n³ + 2 = 127 |
|||
n = 29 => n³ + 2 = 24,391 |
|||
n = 45 => n³ + 2 = 91,127 |
|||
n = 63 => n³ + 2 = 250,049 |
|||
n = 65 => n³ + 2 = 274,627 |
|||
n = 69 => n³ + 2 = 328,511 |
|||
n = 71 => n³ + 2 = 357,913 |
|||
n = 83 => n³ + 2 = 571,789 |
|||
n = 105 => n³ + 2 = 1,157,627 |
|||
n = 113 => n³ + 2 = 1,442,899 |
|||
n = 123 => n³ + 2 = 1,860,869 |
|||
n = 129 => n³ + 2 = 2,146,691 |
|||
n = 143 => n³ + 2 = 2,924,209 |
|||
n = 153 => n³ + 2 = 3,581,579 |
|||
n = 171 => n³ + 2 = 5,000,213 |
|||
n = 173 => n³ + 2 = 5,177,719 |
|||
n = 189 => n³ + 2 = 6,751,271 |
|||
</pre> |
|||
=={{header|Factor}}== |
=={{header|Factor}}== |
Revision as of 15:43, 15 March 2021
- Task
- Find prime numbers of form n3+2, where 0 < n < 200
C
<lang c>#include <stdio.h>
- include <stdbool.h>
- include <locale.h>
bool isPrime(int n) {
int d; if (n < 2) return false; if (!(n%2)) return n == 2; if (!(n%3)) return n == 3; d = 5; while (d*d <= n) { if (!(n%d)) return false; d += 2; if (!(n%d)) return false; d += 4; } return true;
}
int main() {
int n, p; const int limit = 200; setlocale(LC_ALL, ""); for (n = 1; n < limit; ++n) { p = n*n*n + 2; if (isPrime(p)) { printf("n = %3d => n³ + 2 = %'9d\n", n, p); } } return 0;
}</lang>
- Output:
n = 1 => n³ + 2 = 3 n = 3 => n³ + 2 = 29 n = 5 => n³ + 2 = 127 n = 29 => n³ + 2 = 24,391 n = 45 => n³ + 2 = 91,127 n = 63 => n³ + 2 = 250,049 n = 65 => n³ + 2 = 274,627 n = 69 => n³ + 2 = 328,511 n = 71 => n³ + 2 = 357,913 n = 83 => n³ + 2 = 571,789 n = 105 => n³ + 2 = 1,157,627 n = 113 => n³ + 2 = 1,442,899 n = 123 => n³ + 2 = 1,860,869 n = 129 => n³ + 2 = 2,146,691 n = 143 => n³ + 2 = 2,924,209 n = 153 => n³ + 2 = 3,581,579 n = 171 => n³ + 2 = 5,000,213 n = 173 => n³ + 2 = 5,177,719 n = 189 => n³ + 2 = 6,751,271
Factor
Using the parity optimization from the Wren entry:
<lang factor>USING: formatting kernel math math.functions math.primes math.ranges sequences tools.memory.private ;
1 199 2 <range> [
dup 3 ^ 2 + dup prime? [ commas "n = %3d => n³ + 2 = %9s\n" printf ] [ 2drop ] if
] each</lang> Or, using local variables:
<lang factor>USING: formatting kernel math math.primes math.ranges sequences tools.memory.private ;
[let
199 :> limit 1 limit 2 <range> [| n | n n n * * 2 + :> p p prime? [ n p commas "n = %3d => n³ + 2 = %9s\n" printf ] when ] each
]</lang>
- Output:
n = 1 => n³ + 2 = 3 n = 3 => n³ + 2 = 29 n = 5 => n³ + 2 = 127 n = 29 => n³ + 2 = 24,391 n = 45 => n³ + 2 = 91,127 n = 63 => n³ + 2 = 250,049 n = 65 => n³ + 2 = 274,627 n = 69 => n³ + 2 = 328,511 n = 71 => n³ + 2 = 357,913 n = 83 => n³ + 2 = 571,789 n = 105 => n³ + 2 = 1,157,627 n = 113 => n³ + 2 = 1,442,899 n = 123 => n³ + 2 = 1,860,869 n = 129 => n³ + 2 = 2,146,691 n = 143 => n³ + 2 = 2,924,209 n = 153 => n³ + 2 = 3,581,579 n = 171 => n³ + 2 = 5,000,213 n = 173 => n³ + 2 = 5,177,719 n = 189 => n³ + 2 = 6,751,271
Go
<lang go>package main
import "fmt"
func isPrime(n int) bool {
switch { case n < 2: return false case n%2 == 0: return n == 2 case n%3 == 0: return n == 3 default: d := 5 for d*d <= n { if n%d == 0 { return false } d += 2 if n%d == 0 { return false } d += 4 } return true }
}
func commatize(n int) string {
s := fmt.Sprintf("%d", n) if n < 0 { s = s[1:] } le := len(s) for i := le - 3; i >= 1; i -= 3 { s = s[0:i] + "," + s[i:] } if n >= 0 { return s } return "-" + s
}
func main() {
const limit = 200 for n := 1; n < limit; n++ { p := n*n*n + 2 if isPrime(p) { fmt.Printf("n = %3d => n³ + 2 = %9s\n", n, commatize(p)) } }
}</lang>
- Output:
n = 1 => n³ + 2 = 3 n = 3 => n³ + 2 = 29 n = 5 => n³ + 2 = 127 n = 29 => n³ + 2 = 24,391 n = 45 => n³ + 2 = 91,127 n = 63 => n³ + 2 = 250,049 n = 65 => n³ + 2 = 274,627 n = 69 => n³ + 2 = 328,511 n = 71 => n³ + 2 = 357,913 n = 83 => n³ + 2 = 571,789 n = 105 => n³ + 2 = 1,157,627 n = 113 => n³ + 2 = 1,442,899 n = 123 => n³ + 2 = 1,860,869 n = 129 => n³ + 2 = 2,146,691 n = 143 => n³ + 2 = 2,924,209 n = 153 => n³ + 2 = 3,581,579 n = 171 => n³ + 2 = 5,000,213 n = 173 => n³ + 2 = 5,177,719 n = 189 => n³ + 2 = 6,751,271
Ring
<lang ring> load "stdlib.ring"
see "working..." + nl
for n = 1 to 200 step 2
pr = pow(n,3)+2 if isprime(pr) see "n = " + n + " => n³+2 = " + pr + nl ok
next
see "done..." + nl </lang>
- Output:
working... n = 1 => n³+2 = 3 n = 3 => n³+2 = 29 n = 5 => n³+2 = 127 n = 29 => n³+2 = 24391 n = 45 => n³+2 = 91127 n = 63 => n³+2 = 250049 n = 65 => n³+2 = 274627 n = 69 => n³+2 = 328511 n = 71 => n³+2 = 357913 n = 83 => n³+2 = 571789 n = 105 => n³+2 = 1157627 n = 113 => n³+2 = 1442899 n = 123 => n³+2 = 1860869 n = 129 => n³+2 = 2146691 n = 143 => n³+2 = 2924209 n = 153 => n³+2 = 3581579 n = 171 => n³+2 = 5000213 n = 173 => n³+2 = 5177719 n = 189 => n³+2 = 6751271 done...
Wren
If n is even then n³ + 2 is also even, so we only need to examine odd values of n here. <lang ecmascript>import "/math" for Int import "/trait" for Stepped import "/fmt" for Fmt
var limit = 200 for (n in Stepped.new(1...limit, 2)) {
var p = n*n*n + 2 if (Int.isPrime(p)) Fmt.print("n = $3d => n³ + 2 = $,9d", n, p)
}</lang>
- Output:
n = 1 => n³ + 2 = 3 n = 3 => n³ + 2 = 29 n = 5 => n³ + 2 = 127 n = 29 => n³ + 2 = 24,391 n = 45 => n³ + 2 = 91,127 n = 63 => n³ + 2 = 250,049 n = 65 => n³ + 2 = 274,627 n = 69 => n³ + 2 = 328,511 n = 71 => n³ + 2 = 357,913 n = 83 => n³ + 2 = 571,789 n = 105 => n³ + 2 = 1,157,627 n = 113 => n³ + 2 = 1,442,899 n = 123 => n³ + 2 = 1,860,869 n = 129 => n³ + 2 = 2,146,691 n = 143 => n³ + 2 = 2,924,209 n = 153 => n³ + 2 = 3,581,579 n = 171 => n³ + 2 = 5,000,213 n = 173 => n³ + 2 = 5,177,719 n = 189 => n³ + 2 = 6,751,271