给定一个数字 。任务是找到所有小于N的数字,并且它们是两个截然不同的质数的乘积。
例如,33是两个不同质数的乘积,即11 * 3,而像60这样的数字则具有三个不同质数的乘积,即2 * 2 * 3 * 5。
注意:这些数字不能是一个完美的正方形。
例子:
Input : N = 30
Output : 6, 10, 14, 15, 21, 22, 26
Input : N = 50
Output : 6, 10, 14, 15, 21, 22, 26, 33, 34, 35, 38, 39, 46
算法:
- 遍历到N并检查每个数字是否正好有两个素数。
- 现在,要避免出现这样的情况,例如49具有两个素数的7 * 7乘积,请检查该数字是否是一个完美的平方,以确保它具有两个不同的素数。
- 如果满足第1步和第2步的要求,则将其添加到引导程序列表中。
- 遍历矢量并打印其中的所有元素。
下面是上述方法的实现:
C++
// C++ program to find numbers that are product
// of exactly two distinct prime numbers
#include
using namespace std;
// Function to check whether a number
// is a PerfectSquare or not
bool isPerfectSquare(long double x)
{
long double sr = sqrt(x);
return ((sr - floor(sr)) == 0);
}
// Function to check if a number is a
// product of exactly two distinct primes
bool isProduct(int num)
{
int cnt = 0;
for (int i = 2; cnt < 2 && i * i <= num; ++i) {
while (num % i == 0) {
num /= i;
++cnt;
}
}
if (num > 1)
++cnt;
return cnt == 2;
}
// Function to find numbers that are product
// of exactly two distinct prime numbers.
void findNumbers(int N)
{
// Vector to store such numbers
vector vec;
for (int i = 1; i <= N; i++) {
if (isProduct(i) && !isPerfectSquare(i)) {
// insert in the vector
vec.push_back(i);
}
}
// Print all numers till n from the vector
for (int i = 0; i < vec.size(); i++) {
cout << vec[i] << " ";
}
}
// Driver function
int main()
{
int N = 30;
findNumbers(N);
return 0;
}
Java
// Java program to find numbers that are product
// of exactly two distinct prime numbers
import java.util.*;
class GFG{
// Function to check whether a number
// is a PerfectSquare or not
static boolean isPerfectSquare(double x)
{
double sr = Math.sqrt(x);
return ((sr - Math.floor(sr)) == 0);
}
// Function to check if a number is a
// product of exactly two distinct primes
static boolean isProduct(int num)
{
int cnt = 0;
for (int i = 2; cnt < 2 && i * i <= num; ++i) {
while (num % i == 0) {
num /= i;
++cnt;
}
}
if (num > 1)
++cnt;
return cnt == 2;
}
// Function to find numbers that are product
// of exactly two distinct prime numbers.
static void findNumbers(int N)
{
// Vector to store such numbers
Vector vec = new Vector();
for (int i = 1; i <= N; i++) {
if (isProduct(i) && !isPerfectSquare(i)) {
// insert in the vector
vec.add(i);
}
}
// Print all numers till n from the vector
Iterator itr = vec.iterator();
while(itr.hasNext()){
System.out.print(itr.next()+" ");
}
}
// Driver function
public static void main(String[] args)
{
int N = 30;
findNumbers(N);
}
}
// This Code is Contributed by mits
Python 3
# Python 3 program to find numbers that are product
# of exactly two distinct prime numbers
import math
# Function to check whether a number
# is a PerfectSquare or not
def isPerfectSquare(x):
sr = math.sqrt(x)
return ((sr - math.floor(sr)) == 0)
# Function to check if a number is a
# product of exactly two distinct primes
def isProduct( num):
cnt = 0
i = 2
while cnt < 2 and i * i <= num:
while (num % i == 0) :
num //= i
cnt += 1
i += 1
if (num > 1):
cnt += 1
return cnt == 2
# Function to find numbers that are product
# of exactly two distinct prime numbers.
def findNumbers(N):
# Vector to store such numbers
vec = []
for i in range(1,N+1) :
if (isProduct(i) and not isPerfectSquare(i)) :
# insert in the vector
vec.append(i)
# Print all numers till n from the vector
for i in range(len( vec)):
print(vec[i] ,end= " ")
# Driver function
if __name__=="__main__":
N = 30
findNumbers(N)
C#
// C# program to find numbers that are product
// of exactly two distinct prime numbers
using System;
using System.Collections.Generic;
class GFG
{
// Function to check whether a number
// is a PerfectSquare or not
static bool isPerfectSquare(double x)
{
double sr = Math.Sqrt(x);
return ((sr - Math.Floor(sr)) == 0);
}
// Function to check if a number is a
// product of exactly two distinct primes
static bool isProduct(int num)
{
int cnt = 0;
for (int i = 2; cnt < 2 && i * i <= num; ++i)
{
while (num % i == 0)
{
num /= i;
++cnt;
}
}
if (num > 1)
++cnt;
return cnt == 2;
}
// Function to find numbers that are product
// of exactly two distinct prime numbers.
static void findNumbers(int N)
{
// Vector to store such numbers
List vec = new List();
for (int i = 1; i <= N; i++)
{
if (isProduct(i) && !isPerfectSquare(i))
{
// insert in the vector
vec.Add(i);
}
}
// Print all numers till n from the vector
foreach(var a in vec)
Console.Write(a + " ");
}
// Driver code
public static void Main(String[] args)
{
int N = 30;
findNumbers(N);
}
}
// This code has been contributed by 29AjayKumar
PHP
1)
++$cnt;
return $cnt == 2;
}
// Function to find numbers that are product
// of exactly two distinct prime numbers.
function findNumbers($N)
{
// Vector to store such numbers
$vec = array();
for ($i = 1; $i <= $N; $i++)
{
if (isProduct($i) &&
!isPerfectSquare($i))
{
// insert in the vector
array_push($vec, $i);
}
}
// Print all numers till n from the vector
for ($i = 0; $i < sizeof($vec); $i++)
{
echo $vec[$i] . " ";
}
}
// Driver Code
$N = 30;
findNumbers($N);
// This code is contributed by ita_c
Javascript
输出:
6 10 14 15 21 22 26
时间复杂度: O( * )