2549. Count Distinct Numbers on Board

Description

You are given a positive integer n, that is initially placed on a board. Every day, for 109 days, you perform the following procedure:

  • For each number x present on the board, find all numbers 1 <= i <= n such that x % i == 1.
  • Then, place those numbers on the board.

Return the number of distinct integers present on the board after 109 days have elapsed.

Note:

  • Once a number is placed on the board, it will remain on it until the end.
  • % stands for the modulo operation. For example, 14 % 3 is 2.

 

Example 1:

Input: n = 5
Output: 4
Explanation: Initially, 5 is present on the board. 
The next day, 2 and 4 will be added since 5 % 2 == 1 and 5 % 4 == 1. 
After that day, 3 will be added to the board because 4 % 3 == 1. 
At the end of a billion days, the distinct numbers on the board will be 2, 3, 4, and 5. 

Example 2:

Input: n = 3
Output: 2
Explanation: 
Since 3 % 2 == 1, 2 will be added to the board. 
After a billion days, the only two distinct numbers on the board are 2 and 3. 

 

Constraints:

  • 1 <= n <= 100

Solutions

Solution 1: Lateral Thinking

Since every operation on the number $n$ on the desktop will also cause the number $n-1$ to appear on the desktop, the final numbers on the desktop are $[2,…n]$, that is, $n-1$ numbers.

Note that $n$ could be $1$, so it needs to be specially judged.

The time complexity is $O(1)$, and the space complexity is $O(1)$.

Python Code
1
2
3
class Solution:
    def distinctIntegers(self, n: int) -> int:
        return max(1, n - 1)

Java Code
1
2
3
4
5
class Solution {
    public int distinctIntegers(int n) {
        return Math.max(1, n - 1);
    }
}

C++ Code
1
2
3
4
5
6
class Solution {
public:
    int distinctIntegers(int n) {
        return max(1, n - 1);
    }
};

Go Code
1
2
3
4
5
6
func distinctIntegers(n int) int {
	if n == 1 {
		return 1
	}
	return n - 1
}

TypeScript Code
1
2
3
function distinctIntegers(n: number): number {
    return Math.max(1, n - 1);
}

Rust Code
1
2
3
4
5
6
7
8
9
impl Solution {
    pub fn distinct_integers(n: i32) -> i32 {
        if n == 1 {
            return 1;
        }

        n - 1
    }
}