给定两个整数X和K ,任务是确定是否存在正好有X个因数(其中K是素数)的数字。
例子:
Input: X = 8, K = 1
Output: Yes
Explanation:
The number is 128
Factors of 128 = {1, 2, 4, 8, 16, 32, 64, 128} which are 8 in count = X
Among these, only 2 is prime. Therefore count of prime factor = 1 = K
Input: X = 4, K = 2
Output: Yes
Explanation:
The number is 6
Factors of 6 = {1, 2, 3, 6} which are 4 in count = X
Among these, only 2 and 3 are prime. Therefore count of prime factor = 2 = K
方法:
- 假设数字N有X个因子,其中K是素数,例如
- 因此,数字可以写成其中,因子总数由下式计算:
- 可以看出,X是数的质数的“幂+1 ”的乘积。因此,如果我们能够将X划分为K个数的乘积,那么我们就可以形成一个正好有X个因子的数字,其中K是质数。
下面是上述方法的实现:
C++
// C++ program to check if there exists
// a number with X factors
// out of which exactly K are prime
#include
using namespace std;
// Function to check if such number exists
bool check(int X, int K)
{
int prime, temp, sqr, i;
// To store the sum of powers
// of prime factors of X which
// determines the maximum count
// of numbers whose product can form X
prime = 0;
temp = X;
sqr = sqrt(X);
// Determining the prime factors of X
for (i = 2; i <= sqr; i++) {
while (temp % i == 0) {
temp = temp / i;
prime++;
}
}
// To check if the number is prime
if (temp > 2)
prime++;
// If X is 1, then we cannot form
// a number with 1 factor and K
// prime factor (as K is atleast 1)
if (X == 1)
return false;
// If X itself is prime then it
// can be represented as a power
// of only 1 prime factor which
// is X itself so we return true
if (prime == 1 && K == 1)
return true;
// If sum of the powers of prime factors
// of X is greater than or equal to K,
// which means X can be represented as a
// product of K numbers, we return true
else if (prime >= K)
return true;
// In any other case, we return false
// as we cannot form a number with X
// factors and K prime factors
else
return false;
}
// Driver code
int main()
{
int X, K;
X = 4;
K = 2;
if (check(X, K))
cout << "Yes";
else
cout << "No";
}
Java
// Java program to check if there exists
// a number with X factors
// out of which exactly K are prime
import java.util.*;
class GFG{
// Function to check if such number exists
static boolean check(int X, int K)
{
int prime, temp, sqr, i;
// To store the sum of powers
// of prime factors of X which
// determines the maximum count
// of numbers whose product can form X
prime = 0;
temp = X;
sqr = (int) Math.sqrt(X);
// Determining the prime factors of X
for (i = 2; i <= sqr; i++) {
while (temp % i == 0) {
temp = temp / i;
prime++;
}
}
// To check if the number is prime
if (temp > 2)
prime++;
// If X is 1, then we cannot form
// a number with 1 factor and K
// prime factor (as K is atleast 1)
if (X == 1)
return false;
// If X itself is prime then it
// can be represented as a power
// of only 1 prime factor which
// is X itself so we return true
if (prime == 1 && K == 1)
return true;
// If sum of the powers of prime factors
// of X is greater than or equal to K,
// which means X can be represented as a
// product of K numbers, we return true
else if (prime >= K)
return true;
// In any other case, we return false
// as we cannot form a number with X
// factors and K prime factors
else
return false;
}
// Driver code
public static void main(String[] args)
{
int X, K;
X = 4;
K = 2;
if (check(X, K))
System.out.print("Yes");
else
System.out.print("No");
}
}
// This code contributed by Rajput-Ji
Python3
# Python3 program to check if there exists
# a number with X factors
# out of which exactly K are prime
from math import sqrt
# Function to check if such number exists
def check(X,K):
# To store the sum of powers
# of prime factors of X which
# determines the maximum count
# of numbers whose product can form X
prime = 0
temp = X
sqr = int(sqrt(X))
# Determining the prime factors of X
for i in range(2,sqr+1,1):
while (temp % i == 0):
temp = temp // i
prime += 1
# To check if the number is prime
if (temp > 2):
prime += 1
# If X is 1, then we cannot form
# a number with 1 factor and K
# prime factor (as K is atleast 1)
if (X == 1):
return False
# If X itself is prime then it
# can be represented as a power
# of only 1 prime factor w0hich
# is X itself so we return true
if (prime == 1 and K == 1):
return True
# If sum of the powers of prime factors
# of X is greater than or equal to K,
# which means X can be represented as a
# product of K numbers, we return true
elif(prime >= K):
return True
# In any other case, we return false
# as we cannot form a number with X
# factors and K prime factors
else:
return False
# Driver code
if __name__ == '__main__':
X = 4
K = 2
if (check(X, K)):
print("Yes")
else:
print("No")
# This code is contributed by Surendra_Gangwar
C#
// C# program to check if there exists
// a number with X factors
// out of which exactly K are prime
using System;
class GFG{
// Function to check if such number exists
static bool check(int X, int K)
{
int prime, temp, sqr, i;
// To store the sum of powers
// of prime factors of X which
// determines the maximum count
// of numbers whose product can form X
prime = 0;
temp = X;
sqr = Convert.ToInt32(Math.Sqrt(X));
// Determining the prime factors of X
for (i = 2; i <= sqr; i++) {
while (temp % i == 0) {
temp = temp / i;
prime++;
}
}
// To check if the number is prime
if (temp > 2)
prime++;
// If X is 1, then we cannot form
// a number with 1 factor and K
// prime factor (as K is atleast 1)
if (X == 1)
return false;
// If X itself is prime then it
// can be represented as a power
// of only 1 prime factor which
// is X itself so we return true
if (prime == 1 && K == 1)
return true;
// If sum of the powers of prime factors
// of X is greater than or equal to K,
// which means X can be represented as a
// product of K numbers, we return true
else if (prime >= K)
return true;
// In any other case, we return false
// as we cannot form a number with X
// factors and K prime factors
else
return false;
}
// Driver code
static public void Main ()
{
int X, K;
X = 4;
K = 2;
if (check(X, K))
Console.WriteLine("Yes");
else
Console.WriteLine("No");
}
}
// This code is contributed by shubhamsingh10
输出:
Yes