k-几乎素数是具有恰好k个素因数的数字(不一定是互斥的)。
例如,
2、3、5、7、11…(实际上所有素数)都是1-几乎素数,因为它们只有1个素数(本身就是素数)。
4、6、9…。是几乎2个质数,因为它们恰好具有2个质数(4 = 2 * 2、6 = 2 * 3、9 = 3 * 3)
同样,32是5个几乎有质数的数字(32 = 2 * 2 * 2 * 2 * 2),72也是如此(2 * 2 * 2 * 3 * 3)
所有几乎1-的素数都称为素数,而所有几乎2-的素数都称为半素数。
任务是打印前n个以k为素数的数字。
例子:
Input: k = 2, n = 5
Output: 4 6 9 10 14
4 has two prime factors, 2 x 2
6 has two prime factors, 2 x 3
Similarly, 9(3 x 3), 10(2 x 5) and 14(2 x 7)
Input: k = 10, n = 2
Output: 1024 1536
1024 and 1536 are first two numbers with 10
prime factors.
我们迭代自然数并继续打印k-素数,直到打印的k-素数的计数小于或等于n。为了检查数字是否为k-素数,我们找到素数因子的计数,如果计数为k,我们将数字视为k-素数。
下面是上述方法的实现:
C++
// Program to print first n numbers that are k-primes
#include
using namespace std;
// A function to count all prime factors of a given number
int countPrimeFactors(int n)
{
int count = 0;
// Count the number of 2s that divide n
while (n%2 == 0)
{
n = n/2;
count++;
}
// n must be odd at this point. So we can skip one
// element (Note i = i +2)
for (int i = 3; i <= sqrt(n); i = i+2)
{
// While i divides n, count i and divide n
while (n%i == 0)
{
n = n/i;
count++;
}
}
// This condition is to handle the case whien n is a
// prime number greater than 2
if (n > 2)
count++;
return(count);
}
// A function to print the first n numbers that are
// k-almost primes.
void printKAlmostPrimes(int k, int n)
{
for (int i=1, num=2; i<=n; num++)
{
// Print this number if it is k-prime
if (countPrimeFactors(num) == k)
{
printf("%d ", num);
// Increment count of k-primes printed
// so far
i++;
}
}
return;
}
/* Driver program to test above function */
int main()
{
int n = 10, k = 2;
printf("First %d %d-almost prime numbers : \n",
n, k);
printKAlmostPrimes(k, n);
return 0;
}
Java
// Program to print first n numbers that
// are k-primes
import java.io.*;
class GFG {
// A function to count all prime factors
// of a given number
static int countPrimeFactors(int n)
{
int count = 0;
// Count the number of 2s that divide n
while (n % 2 == 0) {
n = n / 2;
count++;
}
// n must be odd at this point. So we
// can skip one element (Note i = i +2)
for (int i = 3; i <= Math.sqrt(n);
i = i + 2) {
// While i divides n, count i and
// divide n
while (n % i == 0) {
n = n / i;
count++;
}
}
// This condition is to handle the case
// whien n is a prime number greater
// than 2
if (n > 2)
count++;
return (count);
}
// A function to print the first n numbers
// that are k-almost primes.
static void printKAlmostPrimes(int k, int n)
{
for (int i = 1, num = 2; i <= n; num++) {
// Print this number if it is k-prime
if (countPrimeFactors(num) == k) {
System.out.print(num + " ");
// Increment count of k-primes
// printed so far
i++;
}
}
return;
}
/* Driver program to test above function */
public static void main(String[] args)
{
int n = 10, k = 2;
System.out.println("First " + n + " "
+ k + "-almost prime numbers : ");
printKAlmostPrimes(k, n);
}
}
// This code is contributed by vt_m.
Python3
# Python3 Program to print first
# n numbers that are k-primes
import math
# A function to count all prime
# factors of a given number
def countPrimeFactors(n):
count = 0;
# Count the number of
# 2s that divide n
while(n % 2 == 0):
n = n / 2;
count += 1;
# n must be odd at this point.
# So we can skip one
# element (Note i = i +2)
i = 3;
while(i <= math.sqrt(n)):
# While i divides n,
# count i and divide n
while (n % i == 0):
n = n / i;
count += 1;
i = i + 2;
# This condition is to handle
# the case whien n is a
# prime number greater than 2
if (n > 2):
count += 1;
return(count);
# A function to print the
# first n numbers that are
# k-almost primes.
def printKAlmostPrimes(k, n):
i = 1;
num = 2
while(i <= n):
# Print this number if
# it is k-prime
if (countPrimeFactors(num) == k):
print(num, end = "");
print(" ", end = "");
# Increment count of
# k-primes printed
# so far
i += 1;
num += 1;
return;
# Driver Code
n = 10;
k = 2;
print("First n k-almost prime numbers:");
printKAlmostPrimes(k, n);
# This code is contributed by mits
C#
// C# Program to print first n
// numbers that are k-primes
using System;
class GFG
{
// A function to count all prime
// factors of a given number
static int countPrimeFactors(int n)
{
int count = 0;
// Count the number of 2s that divide n
while (n % 2 == 0)
{
n = n / 2;
count++;
}
// n must be odd at this point. So we
// can skip one element (Note i = i +2)
for (int i = 3; i <= Math.Sqrt(n);
i = i + 2)
{
// While i divides n, count i and
// divide n
while (n % i == 0)
{
n = n / i;
count++;
}
}
// This condition is to handle
// the case when n is a prime
// number greater than 2
if (n > 2)
count++;
return (count);
}
// A function to print the first n
// numbers that are k-almost primes.
static void printKAlmostPrimes(int k, int n)
{
for (int i = 1, num = 2; i <= n; num++)
{
// Print this number if it is k-prime
if (countPrimeFactors(num) == k)
{
Console.Write(num + " ");
// Increment count of k-primes
// printed so far
i++;
}
}
return;
}
// Driver code
public static void Main()
{
int n = 10, k = 2;
Console.WriteLine("First " + n + " "
+ k + "-almost prime numbers : ");
printKAlmostPrimes(k, n);
}
}
// This code is contributed by Nitin Mittal.
PHP
2)
$count++;
return($count);
}
// A function to print the
// first n numbers that are
// k-almost primes.
function printKAlmostPrimes($k, $n)
{
for ($i = 1, $num = 2; $i <= $n; $num++)
{
// Print this number if
// it is k-prime
if (countPrimeFactors($num) == $k)
{
echo($num);
echo(" ");
// Increment count of
// k-primes printed
// so far
$i++;
}
}
return;
}
// Driver Code
$n = 10;
$k = 2;
echo "First $n $k-almost prime numbers:\n";
printKAlmostPrimes($k, $n);
// This code is contributed by nitin mittal.
?>
Javascript
输出
First 10 2-almost prime numbers :
4 6 9 10 14 15 21 22 25 26
参考: https : //en.wikipedia.org/wiki/Almost_prime