Given Constraints
// Constraints
// 1 <= keys[i] <= 2.5 * 10^13
Minimum value will be 1 &
Maximum value will be 25,000,000,000,000
Sample 1
Given array of n numbers.
[100, 15, 30, 10]
need to find the all numbers (between 1 to each number given in array) who has exactly 3 divisors.
For example
given number is 10
so need to find all the numbers from 1 to 10 who has exactly 3 divisors.
From 1 to 10:
• 4 (the three divisors are 1, 2 & 4)
• 9 (the three divisors are 1, 3 & 9)
so we will return 2 (count). Because 4 & 9 are 2 numbers who exactly have 3 divisors.
So the answer of the sample 1 is
[4, 2, 3, 2]
Explanation
• 100 has exactly 4 numbers (4, 9, 25, 49)….
• 15 has exactly 2 numbers (4, 9)….
• 30 has exactly 2 numbers (4, 9, 25)….
• 10 has exactly 2 numbers (4, 9)….
so far we found that all the numbers are square of prime numbers
• like 4 is a square of 2 & 2 is a prime number
• 9 is a square of 3 & 3 is a prime number
• 25 is a square of 5 & 5 is a prime number
• 49 is a square of 7 & 7 is a prime number
function arrayOfDivisors($x) {
$result = [];
for ($i = 1; $i <= $x; $i++) {
$divisors = 0;
for ($j = 1; $j <= $i; $j++) {
if ($i % $j == 0) {
$divisors++;
}
}
if ($divisors == 3) {
$result[] = $i;
}
}
return $result;
}
function square_of_primes($limit) {
$result = array();
for ($i = 2; $i * $i < $limit; $i++) {
$is_prime = true;
for ($j = 2; $j * $j <= $i; $j++) {
if ($i % $j === 0) {
$is_prime = false;
break;
}
}
if ($is_prime) {
$result[] = $i * $i;
}
}
return count($result);
}
function findDivisors($arr) {
$result = [];
foreach ($arr as $num) {
$result[] = square_of_primes($num);
}
return $result;
}
$arr = [100,10, 30];
$divisors = findDivisors($arr);
echo "<pre>";
print_r( $divisors );
1