Semiprime: Difference between revisions

(→‎{{header|Sidef}}: updated code)
Line 2,227:
 
=={{header|Sidef}}==
Built-in:
<lang ruby>require('ntheory');
<lang ruby>say is_semiprime(2**128 + 1) #=> true
say is_semiprime(2**256 - 1) #=> false</lang>
 
User-defined function, with trial division up to a given bound '''B''':
<lang ruby>func is_semiprime(n, B=1e4) {
static nt = %S'ntheory';
if (var p = [nt.trial_factor(n, 500)]) {
return false if (p.len > 2);
return !!nt.is_prime(p[1]) if (p.len == 2);
}
[nt.factor(n)].len == 2;
 
ifwith (var p = [ntn.trial_factor(n, 500B)]) { |f|
say [2,4,99,100,1679,32768,1234567,9876543,900660121].grep{ is_semiprime(_) }</lang>
return false if (pf.len > 2);
return !!ntf.all { .is_prime(p[1]) } if (pf.len == 2);
}
 
[nt n.factor(n)].len == 2;
 
say [2,4,99,100,1679,32768,1234567,9876543,900660121].grep{ is_semiprime(_is_semiprime) }</lang>
{{out}}
<pre>
2,747

edits