给定一个整数 N ,任务是检查它是否可以表示为恰好K 个素数除数的乘积。
例子:
Input: N = 12, K = 3
Output: Yes
Explanation:
12 can be expressed as product of 2×2×3.
Input: N = 14, K = 3
Output: No
Explanation:
14 can be only expressed as product of 2×7.
方法:
为了解决上面提到的问题,我们给出了 N 值,我们将找到可以将 N 分成的最大值数。我们可以将N 的质因数分解表示为其中p i是N的素因数, a i是指数。我们知道N的除数总数是 .因此,我们可以观察到,我们必须检查是否可以将N表示为K 个数字的乘积。如果最大分裂小于 K,那么就不可能用恰好 K 个素数除数来表达它,否则总是可能的。
C++
// CPP implementation to Check if a
// number can be expressed as a
// product of exactly K prime divisors
#include
using namespace std;
// function to find K prime divisors
void KPrimeDivisors(int N, int K)
{
int maximum_split = 0;
// count number of 2s that divide N
while (N % 2 == 0) {
maximum_split++;
N /= 2;
}
// N must be odd at this point.
// So we can skip one element
for (int i = 3; i * i <= N; i = i + 2) {
while (N % i == 0) {
// divide the value of N
N = N / i;
// increment count
maximum_split++;
}
}
// Condition to handle the case when n
// is a prime number greater than 2
if (N > 2)
maximum_split++;
// check if maximum_split is less than K
// then it not possible
if (maximum_split < K) {
printf("No\n");
return;
}
printf("Yes\n");
}
/* Driver code */
int main()
{
// initialise N and K
int N = 12;
int K = 3;
KPrimeDivisors(N, K);
return 0;
}
Java
// Java implementation to Check if a
// number can be expressed as a
// product of exactly K prime divisors
class GFG {
// function to find K prime divisors
static void KPrimeDivisors(int N, int K)
{
int maximum_split = 0;
// count number of 2s that divide N
while (N % 2 == 0) {
maximum_split++;
N /= 2;
}
// N must be odd at this point.
// So we can skip one element
for (int i = 3; i * i <= N; i = i + 2) {
while (N % i == 0) {
// divide the value of N
N = N / i;
// increment count
maximum_split++;
}
}
// Condition to handle the case when n
// is a prime number greater than 2
if (N > 2)
maximum_split++;
// check if maximum_split is less than K
// then it not possible
if (maximum_split < K) {
System.out.println("No");
return;
}
System.out.println("Yes");
}
/* Driver code */
public static void main (String[] args)
{
// initialise N and K
int N = 12;
int K = 3;
KPrimeDivisors(N, K);
}
}
// This code is contributed by Yash_R
Python3
# Python implementation to Check if a
# number can be expressed as a
# product of exactly K prime divisors
import math as mt
# function to find K prime divisors
def KPrimeDivisors(n, k):
# To count maximum split of N
maximum_split = 0
# count number of 2s that divide N
while n % 2 == 0:
maximum_split+= 1
n = n // 2
# n must be odd at this point
# so we skip one element
for i in range(3, mt.ceil(mt.sqrt(n)), 2):
while n % i == 0:
n = n / i;
maximum_split+= 1
# Condition to handle the case when n
# is a prime number greater than 2
if n > 2:
maximum_split+= 1
# check if maximum_split is less than K
# then it not possible
if maximum_split < k:
print("No")
return
print("Yes")
# Driver code
N = 12
K = 3
KPrimeDivisors(N, K)
C#
// C# implementation to Check if a
// number can be expressed as a
// product of exactly K prime divisors
using System;
class GFG {
// function to find K prime divisors
static void KPrimeDivisors(int N, int K)
{
int maximum_split = 0;
// count number of 2s that divide N
while (N % 2 == 0) {
maximum_split++;
N /= 2;
}
// N must be odd at this point.
// So we can skip one element
for (int i = 3; i * i <= N; i = i + 2) {
while (N % i == 0) {
// divide the value of N
N = N / i;
// increment count
maximum_split++;
}
}
// Condition to handle the case when n
// is a prime number greater than 2
if (N > 2)
maximum_split++;
// check if maximum_split is less than K
// then it not possible
if (maximum_split < K) {
Console.WriteLine("No");
return;
}
Console.WriteLine("Yes");
}
/* Driver code */
public static void Main(String[] args)
{
// initialise N and K
int N = 12;
int K = 3;
KPrimeDivisors(N, K);
}
}
// This code is contributed by 29AjayKumar
Javascript
输出:
Yes
时间复杂度: O(sqrt(N))
如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程和学生竞争性编程现场课程。