> For the complete documentation index, see [llms.txt](https://coding-9.gitbook.io/untitled/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://coding-9.gitbook.io/untitled/binary-search/bs-over-answer-space-answer-space/1283.-find-the-smallest-divisor-given-a-threshold.md).

# 1283. Find the Smallest Divisor Given a Threshold

## Problem Statement

<br>

Given an array of integers `nums` and an integer `threshold`, we will choose a positive integer `divisor`, divide all the array by it, and sum the division's result. Find the **smallest** `divisor` such that the result mentioned above is less than or equal to `threshold`.

Each result of the division is rounded to the nearest integer greater than or equal to that element. (For example: `7/3 = 3` and `10/2 = 5`).

The test cases are generated so that there will be an answer.

&#x20;

**Example 1:**

<pre><code><strong>Input: nums = [1,2,5,9], threshold = 6
</strong><strong>Output: 5
</strong><strong>Explanation: We can get a sum to 17 (1+2+5+9) if the divisor is 1. 
</strong>If the divisor is 4 we can get a sum of 7 (1+1+2+3) and if the divisor is 5 the sum will be 5 (1+1+1+2). 
</code></pre>

**Example 2:**

<pre><code><strong>Input: nums = [44,22,33,11,1], threshold = 5
</strong><strong>Output: 44
</strong></code></pre>

&#x20;

**Constraints:**

* `1 <= nums.length <= 5 * 104`
* `1 <= nums[i] <= 106`
* `nums.length <= threshold <= 106`

## Intuition

```
Approach:

Maximum divisior can be the max_element in the array
So we go from 1 to max(array)

Find the whatever at each step and try to minimize
```

### Links

<https://leetcode.com/problems/find-the-smallest-divisor-given-a-threshold/description/>

### Video Links

### Approach 1:

```
```

{% code title="C++" lineNumbers="true" %}

```cpp
class Solution {
public:
    int smallestDivisor(vector<int>& nums, int threshold) {
        int low = 1, high = *max_element(nums.begin(), nums.end());
        int ans;
        
        while(low<=high){
            int mid = low+(high-low)/2;
            int div_sum=0;

            for(auto &it:nums)
                div_sum += (it + mid - 1)/mid;
            
            if(div_sum <= threshold){
                ans = mid;
                high = mid-1;
            }
            else
                low = mid+1;
        }

        return ans;
    }
};
```

{% endcode %}

### Approach 2:

```
```

{% code title="C++" lineNumbers="true" %}

```cpp
```

{% endcode %}

### Approach 3:

```
```

{% code title="C++" lineNumbers="true" %}

```cpp
```

{% endcode %}

### Approach 4:

```
```

{% code title="C++" lineNumbers="true" %}

```cpp
```

{% endcode %}

### Similar Problems

###
