📜  皮尔朋(Pierpont Prime)

📅  最后修改于: 2021-04-24 20:07:39             🧑  作者: Mango

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