Pierpont Prime

A Pierpont Prime is a prime number of the form p = 2l.3k + 1. First few Pierpont prime numbers are 2, 3, 5, 7, 13, 17, 19, 37, 73, 97, 109, …

Given a number n, the task is to print Pierpont prime numbers less than n.

Examples:



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

The idea is to find numbers having factor of power of 2 and 3 only. Now using Sieve of Eratosthenes find all prime number. Finally, print the common number of both the sequence.

Below is implementation of this approach:

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// CPP program to print Pierpont prime
// numbers smaller than n.
#include <bits/stdc++.h>
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<int> 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;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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<Integer> v=new ArrayList<Integer>();
    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

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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 

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php
// PHP program to print 
// Pierpont prime numbers 
// smaller than n.
  
function printPierpont($n)
    // Finding all numbers 
    // having factor power 
    // of 2 and 3 Using sieve
    $arr = array_fill(0, $n + 1, false);
    $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;
    $x = 0;
    for ($i = 0; $i < $n; $i++)
        if ($arr[$i])
            $v[$x++] = $i + 1; 
  
    // Finding prime number using 
    // sieve of Eratosthenes. 
    // Reusing same array as result
    // of above computations in v.
    $arr1 = array_fill(0, count($arr), false);
    for ($p = 2; 
         $p * $p < $n; $p++)
    {
        if ($arr1[$p] == false)
            for ($i = $p * 2;
                 $i < $n; $i += $p)
                $arr1[$i] = true;
    }
  
    // Printing n pierpont 
    // primes smaller than n
    for ($i = 0; $i < $x; $i++) 
        if (!$arr1[$v[$i]]) 
            echo $v[$i] . " ";
}
  
// Driver Code
$n = 200;
printPierpont($n);
  
// This Code is contributed by mits
?>

chevron_right



Output:

2 3 5 7 13 17 19 37 73 97 109 163 193

This article is contributed by Anuj Chauhan. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.



My Personal Notes arrow_drop_up

Improved By : Mithun Kumar