超素数(也称为高阶素数)是素数的子序列,它们在所有素数序列中占据素数位置。头几个超级素数分别是3、5、11和17。
任务是打印所有小于或等于给定正整数N的超级素数。
例子:
Input: 7
Output: 3 5
3 is super prime because it appears at second
position in list of primes (2, 3, 5, 7, 11, 13,
17, 19, 23, ...) and 2 is also prime. Similarly
5 appears at third position and 3 is a prime.
Input: 17
Output: 3 5 11 17
这个想法是使用Eratosthenes筛子生成所有小于或等于给定数N的素数。生成所有此类素数后,我们将遍历所有数字并将其存储在数组中。一旦我们将所有素数存储在数组中,我们将遍历数组并打印所有在素数中占据素数位置的素数。
C++
// C++ program to print super primes less than
// or equal to n.
#include
using namespace std;
// Generate all prime numbers less than n.
bool SieveOfEratosthenes(int n, bool isPrime[])
{
// Initialize all entries of boolean array
// as true. A value in isPrime[i] will finally
// be false if i is Not a prime, else true
// bool isPrime[n+1];
isPrime[0] = isPrime[1] = false;
for (int i = 2; i <= n; i++)
isPrime[i] = true;
for (int p = 2; p * p <= n; p++)
{
// If isPrime[p] is not changed, then it is
// a prime
if (isPrime[p] == true)
{
// Update all multiples of p
for (int i = p * 2; i <= n; i += p)
isPrime[i] = false;
}
}
}
// Primts all super primes less than or equal to n.
void superPrimes(int n)
{
// Generating primes using Sieve
bool isPrime[n + 1];
SieveOfEratosthenes(n, isPrime);
// Storing all the primes generated in a
// an array primes[]
int primes[n + 1], j = 0;
for (int p = 2; p <= n; p++)
if (isPrime[p])
primes[j++] = p;
// Printing all those prime numbers that
// occupy prime numbered position in
// sequence of prime numbers.
for (int k = 0; k < j; k++)
if (isPrime[k + 1])
cout << primes[k] << " ";
}
// Driven program
int main()
{
int n = 241;
cout << "Super-Primes less than or equal to "
<< n << " are :"<
Java
// Java program to print super
// primes less than or equal to n.
import java.io.*;
class GFG {
// Generate all prime
// numbers less than n.
static void SieveOfEratosthenes
(int n, boolean isPrime[])
{
// Initialize all entries of boolean
// array as true. A value in isPrime[i]
// will finally be false if i is Not
// a prime, else true bool isPrime[n+1];
isPrime[0] = isPrime[1] = false;
for (int i=2; i<=n; i++)
isPrime[i] = true;
for (int p=2; p*p<=n; p++)
{
// If isPrime[p] is not changed,
// then it is a prime
if (isPrime[p] == true)
{
// Update all multiples of p
for (int i=p*2; i<=n; i += p)
isPrime[i] = false;
}
}
}
// Primts all super primes less
// than or equal to n.
static void superPrimes(int n)
{
// Generating primes using Sieve
boolean isPrime[]=new boolean[n+1];
SieveOfEratosthenes(n, isPrime);
// Storing all the primes generated
// in a an array primes[]
int primes[] = new int[n+1];
int j = 0;
for (int p=2; p<=n; p++)
if (isPrime[p])
primes[j++] = p;
// Printing all those prime numbers that
// occupy prime numbered position in
// sequence of prime numbers.
for (int k=0; k
Python
# Python program to print super primes less than
# or equal to n.
# Generate all prime numbers less than n.
def SieveOfEratosthenes(n, isPrime):
# Initialize all entries of boolean array
# as true. A value in isPrime[i] will finally
# be false if i is Not a prime, else true
# bool isPrime[n+1]
isPrime[0] = isPrime[1] = False
for i in range(2,n+1):
isPrime[i] = True
for p in range(2,n+1):
# If isPrime[p] is not changed, then it is
# a prime
if (p*p<=n and isPrime[p] == True):
# Update all multiples of p
for i in range(p*2,n+1,p):
isPrime[i] = False
p += 1
def superPrimes(n):
# Generating primes using Sieve
isPrime = [1 for i in range(n+1)]
SieveOfEratosthenes(n, isPrime)
# Storing all the primes generated in a
# an array primes[]
primes = [0 for i in range(2,n+1)]
j = 0
for p in range(2,n+1):
if (isPrime[p]):
primes[j] = p
j += 1
# Printing all those prime numbers that
# occupy prime numbered position in
# sequence of prime numbers.
for k in range(j):
if (isPrime[k+1]):
print primes[k],
n = 241
print "Super-Primes less than or equal to ", n, " are :n",
superPrimes(n)
# Contributed by: Afzal
C#
// Program to print super primes
// less than or equal to n.
using System;
class GFG {
// Generate all prime
// numbers less than n.
static void SieveOfEratosthenes(int n, bool[] isPrime)
{
// Initialize all entries of boolean
// array as true. A value in isPrime[i]
// will finally be false if i is Not
// a prime, else true bool isPrime[n+1];
isPrime[0] = isPrime[1] = false;
for (int i = 2; i <= n; i++)
isPrime[i] = true;
for (int p = 2; p * p <= n; p++) {
// If isPrime[p] is not changed,
// then it is a prime
if (isPrime[p] == true) {
// Update all multiples of p
for (int i = p * 2; i <= n; i += p)
isPrime[i] = false;
}
}
}
// Prints all super primes less
// than or equal to n.
static void superPrimes(int n)
{
// Generating primes using Sieve
bool[] isPrime = new bool[n + 1];
SieveOfEratosthenes(n, isPrime);
// Storing all the primes generated
// in a an array primes[]
int[] primes = new int[n + 1];
int j = 0;
for (int p = 2; p <= n; p++)
if (isPrime[p])
primes[j++] = p;
// Printing all those prime numbers
// that occupy prime number position
// in sequence of prime numbers.
for (int k = 0; k < j; k++)
if (isPrime[k + 1])
Console.Write(primes[k] + " ");
}
// Driven program
public static void Main()
{
int n = 241;
Console.WriteLine("Super-Primes less than or equal to "
+ n + " are :");
superPrimes(n);
}
}
// This code is contributed by Anant Agarwal.
PHP
Javascript
输出:
Super-Primes less than or equal to 241 are :
3 5 11 17 31 41 59 67 83 109 127 157 179 191 211 241