Pierpont质数是形式为p = 2 l .3 k + 1的质数。前几个Pierpont质数是2、3、5、7、13、17、19、37、73、97、109等。
给定数字n ,任务是打印小于n的Pierpont质数。
例子:
Input : n = 15
Output : 2 3 5 7 13
Input : n = 200
Output : 2 3 5 7 13 17 19 37
73 97 109 163 193
这个想法是找到仅具有2和3的幂因子的数字。现在,使用Eratosthenes筛子查找所有素数。最后,打印两个序列的通用编号。
以下是此方法的实现:
C++
// CPP program to print Pierpont prime
// numbers smaller than n.
#include
using namespace std;
bool printPierpont(int n)
{
// Finding all numbers having factor power
// of 2 and 3 Using sieve
bool arr[n+1];
memset(arr, false, sizeof arr);
int two = 1, three = 1;
while (two + 1 < n) {
arr[two] = true;
while (two * three + 1 < n) {
arr[three] = true;
arr[two * three] = true;
three *= 3;
}
three = 1;
two *= 2;
}
// Storing number of the form 2^i.3^k + 1.
vector v;
for (int i = 0; i < n; i++)
if (arr[i])
v.push_back(i + 1);
// Finding prime number using sieve of
// Eratosthenes. Reusing same array as
// result of above computations in v.
memset(arr, false, sizeof arr);
for (int p = 2; p * p < n; p++) {
if (arr[p] == false)
for (int i = p * 2; i < n; i += p)
arr[i] = true;
}
// Printing n pierpont primes smaller than n
for (int i = 0; i < v.size(); i++)
if (!arr[v[i]])
cout << v[i] << " ";
}
// Driven Program
int main()
{
int n = 200;
printPierpont(n);
return 0;
}
Java
// Java program to print Pierpont prime
// numbers smaller than n.
import java.util.*;
class GFG{
static void printPierpont(int n)
{
// Finding all numbers having factor power
// of 2 and 3 Using sieve
boolean[] arr=new boolean[n+1];
int two = 1, three = 1;
while (two + 1 < n) {
arr[two] = true;
while (two * three + 1 < n) {
arr[three] = true;
arr[two * three] = true;
three *= 3;
}
three = 1;
two *= 2;
}
// Storing number of the form 2^i.3^k + 1.
ArrayList v=new ArrayList();
for (int i = 0; i < n; i++)
if (arr[i])
v.add(i + 1);
// Finding prime number using sieve of
// Eratosthenes. Reusing same array as
// result of above computations in v.
arr=new boolean[n+1];
for (int p = 2; p * p < n; p++) {
if (arr[p] == false)
for (int i = p * 2; i < n; i += p)
arr[i] = true;
}
// Printing n pierpont primes smaller than n
for (int i = 0; i < v.size(); i++)
if (!arr[v.get(i)])
System.out.print(v.get(i)+" ");
}
// Driven Program
public static void main(String[] args)
{
int n = 200;
printPierpont(n);
}
}
// this code is contributed by mits
Python3
# Python3 program to print Pierpont
# prime numbers smaller than n.
def printPierpont(n):
# Finding all numbers having factor
# power of 2 and 3 Using sieve
arr = [False] * (n + 1);
two = 1;
three = 1;
while (two + 1 < n):
arr[two] = True;
while (two * three + 1 < n):
arr[three] = True;
arr[two * three] = True;
three *= 3;
three = 1;
two *= 2;
# Storing number of the form 2^i.3^k + 1.
v = [];
for i in range(n):
if (arr[i]):
v.append(i + 1);
# Finding prime number using
# sieve of Eratosthenes.
# Reusing same array as result
# of above computations in v.
arr1 = [False] * (len(arr));
p = 2;
while (p * p < n):
if (arr1[p] == False):
for i in range(p * 2, n, p):
arr1[i] = True;
p += 1;
# Printing n pierpont primes
# smaller than n
for i in range(len(v)):
if (not arr1[v[i]]):
print(v[i], end = " ");
# Driver Code
n = 200;
printPierpont(n);
# This code is contributed by mits
C#
// C# program to print Pierpont prime
// numbers smaller than n.
using System;
using System.Collections;
class GFG{
static void printPierpont(int n)
{
// Finding all numbers having factor power
// of 2 and 3 Using sieve
bool[] arr=new bool[n+1];
int two = 1, three = 1;
while (two + 1 < n) {
arr[two] = true;
while (two * three + 1 < n) {
arr[three] = true;
arr[two * three] = true;
three *= 3;
}
three = 1;
two *= 2;
}
// Storing number of the form 2^i.3^k + 1.
ArrayList v=new ArrayList();
for (int i = 0; i < n; i++)
if (arr[i])
v.Add(i + 1);
// Finding prime number using sieve of
// Eratosthenes. Reusing same array as
// result of above computations in v.
arr=new bool[n+1];
for (int p = 2; p * p < n; p++) {
if (arr[p] == false)
for (int i = p * 2; i < n; i += p)
arr[i] = true;
}
// Printing n pierpont primes smaller than n
for (int i = 0; i < v.Count; i++)
if (!arr[(int)v[i]])
Console.Write(v[i]+" ");
}
// Driven Program
static void Main()
{
int n = 200;
printPierpont(n);
}
}
// this code is contributed by mits
PHP
输出:
2 3 5 7 13 17 19 37 73 97 109 163 193