Welcome to Subscribe On Youtube

Formatted question description: https://leetcode.ca/all/1952.html

1952. Three Divisors

Level

Easy

Description

Given an integer n, return true if n has exactly three positive divisors. Otherwise, return false.

An integer m is a divisor of n if there exists an integer k such that n = k * m.

Example 1:

Input: n = 2

Output: false

Explantion: 2 has only two divisors: 1 and 2.

Example 2:

Input: n = 4

Output: true

Explantion: 4 has three divisors: 1, 2, and 4.

Constraints:

  • 1 <= n <= 10^4

Solution

If n has three divisors, then n must be a perfect square number. Calculate the square root of n, and loop over all integers from 1 to the square root minus 1. For each i such that n is divisible by i, add 2 to the number of divisors. The final divisor is the square root of n. Return true if the number of divisors equals 3.

  • class Solution {
        public boolean isThree(int n) {
            int sqrt = (int) Math.sqrt(n);
            if (sqrt * sqrt != n)
                return false;
            int divisors = 1;
            for (int i = 1; i < sqrt; i++) {
                if (n % i == 0)
                    divisors += 2;
            }
            return divisors == 3;
        }
    }
    
    ############
    
    class Solution {
        public boolean isThree(int n) {
            int cnt = 0;
            for (int i = 1; i <= n / i; ++i) {
                if (n % i == 0) {
                    cnt += n / i == i ? 1 : 2;
                }
            }
            return cnt == 3;
        }
    }
    
  • // OJ: https://leetcode.com/problems/three-divisors/
    // Time: O(N)
    // Space: O(1)
    class Solution {
    public:
        bool isThree(int n) {
            int ans = 0;
            for (int i = 1; i <= n && ans <= 3; ++i) {
                if (n % i == 0) ++ans;
            }
            return ans == 3;
        }
    };
    
  • class Solution:
        def isThree(self, n: int) -> bool:
            return sum(n % i == 0 for i in range(2, n)) == 1
    
    ############
    
    # 1952. Three Divisors
    # https://leetcode.com/problems/three-divisors/
    
    class Solution:
        def isThree(self, n: int) -> bool:
            res = 0
            
            for k in range(1, n + 1):
                if n % k == 0: res += 1
                
                if res > 3: return False
            
            return res == 3
    
    
  • func isThree(n int) bool {
    	cnt := 0
    	for i := 1; i <= n/i; i++ {
    		if n%i == 0 {
    			if n/i == i {
    				cnt++
    			} else {
    				cnt += 2
    			}
    		}
    	}
    	return cnt == 3
    }
    
  • /**
     * @param {number} n
     * @return {boolean}
     */
    var isThree = function (n) {
        let cnt = 0;
        for (let i = 1; i <= n / i; ++i) {
            if (n % i == 0) {
                cnt += ~~(n / i) == i ? 1 : 2;
            }
        }
        return cnt == 3;
    };
    
    

All Problems

All Solutions