Open In App

Blum Integer

Last Updated : 23 Jun, 2022
Improve
Improve
Like Article
Like
Save
Share
Report

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>
 
// Javascript implementation to check If
// a number is a Blum integer
function isBlumInteger(n)
{
    let prime = new Array(n + 1);
    for(let i = 0; i < n; i++)
        prime[i] = true;
 
    // To store prime numbers from 2 to n
    for(let i = 2; i * i <= n; i++)
    {
         
        // If prime[i] is not changed,
        // then it is a prime
        if (prime[i] == true)
        {
             
            // Update all multiples of p
            for(let j = i * 2; j <= n; j += i)
                prime[j] = false;
        }
    }
 
    // To check if the given odd integer
    // is Blum Integer or not
    for(let i = 2; i <= n; i++)
    {
        if (prime[i])
        {
             
            // Checking the factors are
            // of 4t + 3 form or not
            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;
}
 
// Driver code
 
// Give odd integer greater than 20
let n = 249;
 
if (isBlumInteger(n) == true)
    document.write("Yes");
else
    document.write("No");
     
// This code is contributed by decode2207
 
</script>


Output: 

Yes

 

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.



Like Article
Suggest improvement
Share your thoughts in the comments

Similar Reads