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++
#include <bits/stdc++.h>
using namespace std;
bool printPierpont( int n)
{
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;
}
vector< int > v;
for ( int i = 0; i < n; i++)
if (arr[i])
v.push_back(i + 1);
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 ;
}
for ( int i = 0; i < v.size(); i++)
if (!arr[v[i]])
cout << v[i] << " " ;
}
int main()
{
int n = 200;
printPierpont(n);
return 0;
}
|
Java
import java.util.*;
class GFG{
static void printPierpont( int n)
{
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 ;
}
ArrayList<Integer> v= new ArrayList<Integer>();
for ( int i = 0 ; i < n; i++)
if (arr[i])
v.add(i + 1 );
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 ;
}
for ( int i = 0 ; i < v.size(); i++)
if (!arr[v.get(i)])
System.out.print(v.get(i)+ " " );
}
public static void main(String[] args)
{
int n = 200 ;
printPierpont(n);
}
}
|
Python3
def printPierpont(n):
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 ;
v = [];
for i in range (n):
if (arr[i]):
v.append(i + 1 );
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 ;
for i in range ( len (v)):
if ( not arr1[v[i]]):
print (v[i], end = " " );
n = 200 ;
printPierpont(n);
|
C#
using System;
using System.Collections;
class GFG{
static void printPierpont( int n)
{
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;
}
ArrayList v= new ArrayList();
for ( int i = 0; i < n; i++)
if (arr[i])
v.Add(i + 1);
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 ;
}
for ( int i = 0; i < v.Count; i++)
if (!arr[( int )v[i]])
Console.Write(v[i]+ " " );
}
static void Main()
{
int n = 200;
printPierpont(n);
}
}
|
PHP
<?php
function printPierpont( $n )
{
$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;
}
$v ;
$x = 0;
for ( $i = 0; $i < $n ; $i ++)
if ( $arr [ $i ])
$v [ $x ++] = $i + 1;
$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;
}
for ( $i = 0; $i < $x ; $i ++)
if (! $arr1 [ $v [ $i ]])
echo $v [ $i ] . " " ;
}
$n = 200;
printPierpont( $n );
?>
|
Javascript
<script>
function printPierpont(n)
{
var arr = Array(n+1).fill( false );
var 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;
}
var v = [];
for ( var i = 0; i < n; i++)
if (arr[i])
v.push(i + 1);
arr = Array(n+1).fill( false );
for ( var p = 2; p * p < n; p++) {
if (arr[p] == false )
for ( var i = p * 2; i < n; i += p)
arr[i] = true ;
}
for ( var i = 0; i < v.length; i++)
if (!arr[v[i]])
document.write( v[i] + " " );
}
var n = 200;
printPierpont(n);
</script>
|
Output:
2 3 5 7 13 17 19 37 73 97 109 163 193
Last Updated :
06 May, 2021
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...