Blum Integer
Last Updated :
23 Jun, 2022
Blum Integer is a semi-prime number, suppose p and q are the two factors (i.e. n = p * q), they(p and q) are of the form 4t + 3, where t is some integer.
First few Blum Integers are 21, 33, 57, 69, 77, 93, 129, 133, 141, 161, 177, …
Note: Because of the condition that both the factors should be semi-primes, even numbers can not be Blum integers neither can be the numbers below 20,
So we have to check only for an odd integer greater than 20 if it is a Blum Integer or not.
Examples :
Input: 33
Output: Yes
Explanation: 33 = 3 * 11, 3 and 11 are both
semi-primes as well as of the form 4t + 3
for t = 0, 2
Input: 77
Output: Yes
Explanation: 77 = 7 * 11, 7 and 11 both are
semi-prime as well as of the form 4t + 3
for t = 1, 2
Input: 25
Output: No
Explanation: 25 = 5*5, 5 and 5 are both
semi-prime but are not of the form 4t
+ 3, Hence 25 is not a Blum integer.
Approach: For a given odd integer greater than 20, we calculate the prime numbers from 1 to that odd integer. If we find any prime number that divides that odd integer and its quotient both are prime and follow the form 4t + 3 for some integer, then the given odd integer is Blum Integer.
Below is the implementation of above approach :
C++
Java
Python3
C#
PHP
Javascript
<script>
function isBlumInteger(n)
{
let prime = new Array(n + 1);
for (let i = 0; i < n; i++)
prime[i] = true ;
for (let i = 2; i * i <= n; i++)
{
if (prime[i] == true )
{
for (let j = i * 2; j <= n; j += i)
prime[j] = false ;
}
}
for (let i = 2; i <= n; i++)
{
if (prime[i])
{
if ((n % i == 0) && ((i - 3) % 4) == 0)
{
let q = parseInt(n / i, 10);
return (q != i && prime[q] &&
(q - 3) % 4 == 0);
}
}
}
return false ;
}
let n = 249;
if (isBlumInteger(n) == true )
document.write( "Yes" );
else
document.write( "No" );
</script>
|
Time Complexity: O(nsqrtn)
Auxiliary Space: O(n)
Please suggest if someone has a better solution which is more efficient in terms of space and time.
Share your thoughts in the comments
Please Login to comment...