📌  相关文章
📜  以相反的顺序打印从1到N的质数

📅  最后修改于: 2021-05-05 00:47:56             🧑  作者: Mango

给定数字N,以相反的顺序打印所有小于或等于N的素数。
例如,如果N为9,则输出应为“ 7、5、3、2”。

例子:

Input :  N = 5
Output : 5 3 2

Input : N = 20
Output : 19 17 13 11 7 5 3 2

一个简单的解决方案是从N遍历到1。对于每个数字,请使用学校方法检查素数来检查它是否为素数。如果数字是素数,则将其打印出来。

一个有效的解决方案是使用Eratosthenes筛。我们有效地找到了从1到N的所有数字,然后打印它们。

C++
// C++ program to print all primes between 1
// to N in reverse order using Sieve of
// Eratosthenes
#include 
using namespace std;
  
void Reverseorder(int n)
{
    // Create a boolean array "prime[0..n]" and
    // initialize all entries it as true. A value
    // in prime[i] will finally be false if i
    // is Not a prime, else true.
    bool prime[n + 1];
    memset(prime, true, sizeof(prime));
  
    for (int p = 2; p * p <= n; p++) {
  
        // If prime[p] is not changed, then
        // it is a prime
        if (prime[p] == true) {
  
            // Update all multiples of p
            for (int i = p * 2; i <= n; i += p)
                prime[i] = false;
        }
    }
  
    // Print all prime numbers in reverse order
    for (int p = n; p >= 2; p--)
        if (prime[p])
            cout << p << " ";
}
  
// Driver Program
int main()
{
    // static input
    int N = 25;
  
    // to display
    cout << "Prime number in reverse order" << endl;
  
    if (N == 1)
        cout << "No prime no exist in this range";
    else
        Reverseorder(N); // calling the function
  
    return 0;
}


Java
// Java program to print all primes between 1
// to N in reverse order using Sieve of
// Eratosthenes
import java.io.*;
import java.util.*;
  
class GFG {
    static void reverseorder(int n)
    {
  
        // Create a boolean array "prime[0..n]" and
        // initialize all entries it as true. A value
        // in prime[i] will finally be false if i
        // is Not a prime, else true.
        boolean prime[] = new boolean[n + 1];
        for (int i = 0; i < n; i++)
            prime[i] = true;
  
        for (int p = 2; p * p <= n; p++) {
  
            // If prime[p] is not changed, then
            // it is a prime
            if (prime[p] == true) {
  
                // Update all multiples of p
                for (int i = p * 2; i <= n; i += p)
                    prime[i] = false;
            }
        }
  
        // Print all prime numbers
        for (int i = n; i >= 2; i--)
            if (prime[i] == true)
                System.out.print(i + " ");
    }
  
    // Driver Program to test above function
    public static void main(String args[])
    {
        // static input
        int N = 25;
        // To display
        System.out.println("Prime number in reverse order");
  
        if (N == 1)
            System.out.println("No prime no exist in this range");
        else
            reverseorder(N); // calling the function
    }
}


Python3
# Python3 program to print all primes 
# between 1 to N in reverse order 
# using Sieve of Eratosthenes
def Reverseorder(n):
  
    # Create a boolean array "prime[0..n]" 
    # and initialize all entries it as true. 
    # A value in prime[i] will finally be 
    # false if i is Not a prime, else true.
    prime = [True] * (n + 1);
  
    p = 2; 
    while(p * p <= n):
  
        # If prime[p] is not changed, 
        # then it is a prime
        if (prime[p] == True): 
  
            # Update all multiples of p
            for i in range((p * 2), (n + 1), p):
                prime[i] = False;
        p += 1;
  
    # Print all prime numbers in 
    # reverse order
    for p in range(n, 1, -1):
        if (prime[p]):
            print(p, end = " ");
  
# Driver Code
  
# static input
N = 25;
  
# to display
print("Prime number in reverse order");
  
if (N == 1):
    print("No prime no exist in this range");
else:
    Reverseorder(N); # calling the function
  
# This code is contributed by mits


C#
// C# program to print all primes between 1
// to N in reverse order using Sieve of
// Eratosthenes
using System;
  
class GFG {
  
    static void reverseorder(int n)
    {
  
        // Create a boolean array "prime[0..n]"
        // and initialize all entries it as
        // true. A value in prime[i] will 
        // finally be false if i is Not a
        // prime, else true.
        bool []prime = new bool[n + 1];
          
        for (int i = 0; i < n; i++)
            prime[i] = true;
  
        for (int p = 2; p * p <= n; p++) {
  
            // If prime[p] is not changed, 
            // then it is a prime
            if (prime[p] == true) {
  
                // Update all multiples of p
                for (int i = p * 2; i <= n;
                                     i += p)
                    prime[i] = false;
            }
        }
  
        // Print all prime numbers
        for (int i = n; i >= 2; i--)
            if (prime[i] == true)
                Console.Write(i + " ");
    }
      
    // Driver code
    public static void Main()
    {
          
        // static input
        int N = 25;
          
        // To display
        Console.WriteLine("Prime number in"
                       + " reverse order");
  
        if (N == 1)
            Console.WriteLine("No prime no"
                + " exist in this range");
        else
          
            // calling the function
            reverseorder(N);
    }
}
  
// This code is contributed by Sam007.


PHP
= 2; $p--)
        if ($prime[$p])
            echo $p." ";
}
  
// Driver Code
  
// static input
$N = 25;
  
// to display
echo "Prime number in reverse order\n";
  
if ($N == 1)
    echo "No prime no exist in this range";
else
    Reverseorder($N); // calling the function
  
// This code is contributed by mits
?>


输出:
Prime number in reverse order
23 19 17 13 11 7 5 3 2