📜  超级总理

📅  最后修改于: 2021-04-26 05:37:50             🧑  作者: Mango

超素数(也称为高阶素数)是素数的子序列,它们在所有素数序列中占据素数位置。头几个超级素数分别是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