diff --git a/Build.PL b/Build.PL index c797331a7..b6a33ebf3 100644 --- a/Build.PL +++ b/Build.PL @@ -58,7 +58,7 @@ my $builder = Module::Build->new( 'Time::HiRes' => 0, 'Getopt::Std' => 0, 'Term::ReadLine' => 0, - 'Math::Prime::Util::GMP' => 0.41, + 'Math::Prime::Util::GMP' => 0.42, }, recommends => { diff --git a/lib/Sidef/Types/Number/Inf.pm b/lib/Sidef/Types/Number/Inf.pm index 0018ccacd..46b43ffcf 100644 --- a/lib/Sidef/Types/Number/Inf.pm +++ b/lib/Sidef/Types/Number/Inf.pm @@ -67,6 +67,7 @@ package Sidef::Types::Number::Inf { *is_nan = \&is_real; *is_neg = \&is_real; *is_prime = \&is_real; + *is_semiprime = \&is_real; *is_prob_prime = \&is_real; *is_prov_prime = \&is_real; *is_mersenne_prime = \&is_real; diff --git a/lib/Sidef/Types/Number/Nan.pm b/lib/Sidef/Types/Number/Nan.pm index dd1cdd197..73d7a4f39 100644 --- a/lib/Sidef/Types/Number/Nan.pm +++ b/lib/Sidef/Types/Number/Nan.pm @@ -235,6 +235,7 @@ package Sidef::Types::Number::Nan { *is_square = \&is_real; *is_sqr = \&is_real; *is_prime = \&is_real; + *is_semiprime = \&is_real; *is_prob_prime = \&is_real; *is_prov_prime = \&is_real; *is_mersenne_prime = \&is_real; diff --git a/lib/Sidef/Types/Number/Number.pm b/lib/Sidef/Types/Number/Number.pm index e88c46b54..d8dad243e 100644 --- a/lib/Sidef/Types/Number/Number.pm +++ b/lib/Sidef/Types/Number/Number.pm @@ -3058,6 +3058,14 @@ package Sidef::Types::Number::Number { _mpz2big($x); } + sub is_semiprime { + my $x = ${$_[0]}; + Math::GMPq::Rmpq_integer_p($x) + && Math::Prime::Util::GMP::is_semiprime(Math::GMPq::Rmpq_get_str($x, 10)) + ? Sidef::Types::Bool::Bool::TRUE + : Sidef::Types::Bool::Bool::FALSE; + } + sub is_prime { my $x = ${$_[0]}; Math::GMPq::Rmpq_integer_p($x)