📜  查找给定范围[L,R]中的素数亚当整数

📅  最后修改于: 2021-05-06 17:45:27             🧑  作者: Mango

给定两个数字LR表示范围[L,R] ,任务是打印该范围内的所有素数亚当整数。
注意:一个既是素数又是adam的数字称为素数adam数。
例子:

方法:此问题中使用的想法是首先检查数字是否为质数。如果是素数,请检查其是否为亚当数:

  • 迭代给定范围[L,R]
  • 对于每个数字,请检查数字是否为质数。
  • 如果是素数,请检查该数字是否为亚当数。
  • 如果数字既是素数又是亚当数,则打印该数字。

下面是上述方法的实现:

C++
// C++ program to find all prime
// adam numbers in the given range
#include 
using namespace std;
 
int reverse(int a)
{
    int rev = 0;
    while (a != 0)
    {
        int r = a % 10;
 
        // Reversing a number by taking
        // remainder at a time
        rev = rev * 10 + r;
        a = a / 10;
    }
    return (rev);
}
 
// Function to check if a number
// is a prime or not
int prime(int a)
{
    int k = 0;
 
    // Iterating till the number
    for(int i = 2; i < a; i++)
    {
         
       // Checking for factors
       if (a % i == 0)
       {
           k = 1;
           break;
       }
    }
 
    // Returning 1 if the there are
    // no factors of the number other
    // than 1 or itself
    if (k == 1)
    {
        return (0);
    }
    else
    {
        return (1);
    }
}
 
// Function to check whether a number
// is an adam number or not
int adam(int a)
{
     
    // Reversing given number
    int r1 = reverse(a);
 
    // Squaring given number
    int s1 = a * a;
 
    // Squaring reversed number
    int s2 = r1 * r1;
 
    // Reversing the square of the
    // reversed number
    int r2 = reverse(s2);
 
    // Checking if the square of the
    // number and the square of its
    // reverse are equal or not
    if (s1 == r2)
    {
        return (1);
    }
    else
    {
        return (0);
    }
}
 
// Function to find all the prime
// adam numbers in the given range
void find(int m, int n)
{
 
    // If the first number is greater
    // than the second number,
    // print invalid
    if (m > n)
    {
        cout << " INVALID INPUT " << endl;
    }
    else
    {
        int c = 0;
 
        // Iterating through all the
        // numbers in the given range
        for(int i = m; i <= n; i++)
        {
             
           // Checking for prime number
           int l = prime(i);
           // Checking for Adam number
           int k = adam(i);
           if ((l == 1) && (k == 1))
           {
               cout << i << "\t";
           }
        }
    }
}
 
// Driver code
int main()
{
    int L = 5, R = 100;
     
    find(L, R);
    return 0;
}
 
// This code is contributed by Amit Katiyar


Java
// Java program to find all prime
// adam numbers in the given range
import java.io.*;
 
class GFG {
 
    public static int reverse(int a)
    {
        int rev = 0;
        while (a != 0) {
            int r = a % 10;
 
            // reversing a number by taking
            // remainder at a time
            rev = rev * 10 + r;
            a = a / 10;
        }
        return (rev);
    }
 
    // Function to check if a number
    // is a prime or not
    public static int prime(int a)
    {
        int k = 0;
 
        // Iterating till the number
        for (int i = 2; i < a; i++) {
 
            // Checking for factors
            if (a % i == 0) {
                k = 1;
                break;
            }
        }
 
        // Returning 1 if the there are no factors
        // of the number other than 1 or itself
        if (k == 1) {
            return (0);
        }
        else {
            return (1);
        }
    }
 
    // Function to check whether a number
    // is an adam number or not
    public static int adam(int a)
    {
        // Reversing given number
        int r1 = reverse(a);
 
        // Squaring given number
        int s1 = a * a;
 
        // Squaring reversed number
        int s2 = r1 * r1;
 
        // Reversing the square of the
        // reversed number
        int r2 = reverse(s2);
 
        // Checking if the square of the number
        // and the square of its reverse
        // are equal or not
        if (s1 == r2) {
            return (1);
        }
        else {
            return (0);
        }
    }
    // Function to find all the prime
    // adam numbers in the given range
    public static void find(int m, int n)
    {
 
        // If the first number is greater
        // than the second number,
        // print invalid
        if (m > n) {
            System.out.println(" INVALID INPUT ");
        }
        else {
 
            int c = 0;
 
            // Iterating through all the numbers
            // in the given range
            for (int i = m; i <= n; i++) {
 
                // Checking for prime number
                int l = prime(i);
 
                // Checking for Adam number
                int k = adam(i);
                if ((l == 1) && (k == 1)) {
                    System.out.print(i + "\t");
                }
            }
        }
    }
 
    // Driver code
    public static void main(String[] args)
    {
 
        int L = 5, R = 100;
        find(L, R);
    }
}


Python3
# Python3 program to find all prime
# adam numbers in the given range
 
def reverse(a):
 
    rev = 0;
    while (a != 0):
     
        r = a % 10;
 
        # Reversing a number by taking
        # remainder at a time
        rev = rev * 10 + r;
        a = a // 10;
     
    return(rev);
 
# Function to check if a number
# is a prime or not
def prime(a):
 
    k = 0;
 
    # Iterating till the number
    for i in range(2, a):
 
        # Checking for factors
        if (a % i == 0):
            k = 1;
            break;
 
    # Returning 1 if the there are
    # no factors of the number other
    # than 1 or itself
    if (k == 1):
        return (0);
    else:
        return (1);
 
# Function to check whether a number
# is an adam number or not
def adam(a):
 
    # Reversing given number
    r1 = reverse(a);
 
    # Squaring given number
    s1 = a * a;
 
    # Squaring reversed number
    s2 = r1 * r1;
 
    # Reversing the square of the
    # reversed number
    r2 = reverse(s2);
 
    # Checking if the square of the
    # number and the square of its
    # reverse are equal or not
    if (s1 == r2):
        return (1);
    else:
        return (0);
     
# Function to find all the prime
# adam numbers in the given range
def find(m, n):
 
    # If the first number is greater
    # than the second number,
    # print invalid
    if (m > n):
        print("INVALID INPUT\n");
    else:
        c = 0;
 
    # Iterating through all the
    # numbers in the given range
    for i in range(m, n):
 
        # Checking for prime number
        l = prime(i);
 
        # Checking for Adam number
        k = adam(i);
        if ((l == 1) and (k == 1)):
            print(i, "\t", end = " ");
             
# Driver code
L = 5; R = 100;
find(L, R);
 
# This code is contributed by Code_Mech


C#
// C# program to find all prime
// adam numbers in the given range
using System;
 
class GFG{
 
public static int reverse(int a)
{
    int rev = 0;
    while (a != 0)
    {
        int r = a % 10;
 
        // Reversing a number by taking
        // remainder at a time
        rev = rev * 10 + r;
        a = a / 10;
    }
    return (rev);
}
 
// Function to check if a number
// is a prime or not
public static int prime(int a)
{
    int k = 0;
 
    // Iterating till the number
    for(int i = 2; i < a; i++)
    {
        
       // Checking for factors
       if (a % i == 0)
       {
           k = 1;
           break;
       }
    }
     
    // Returning 1 if the there are no factors
    // of the number other than 1 or itself
    if (k == 1)
    {
        return (0);
    }
    else
    {
        return (1);
    }
}
 
// Function to check whether a number
// is an adam number or not
public static int adam(int a)
{
     
    // Reversing given number
    int r1 = reverse(a);
 
    // Squaring given number
    int s1 = a * a;
 
    // Squaring reversed number
    int s2 = r1 * r1;
 
    // Reversing the square of the
    // reversed number
    int r2 = reverse(s2);
 
    // Checking if the square of the
    // number and the square of its
    // reverse are equal or not
    if (s1 == r2)
    {
        return (1);
    }
    else
    {
        return (0);
    }
}
 
// Function to find all the prime
// adam numbers in the given range
public static void find(int m, int n)
{
 
    // If the first number is greater
    // than the second number,
    // print invalid
    if (m > n)
    {
        Console.WriteLine("INVALID INPUT");
    }
    else
    {
         
        // Iterating through all the numbers
        // in the given range
        for(int i = m; i <= n; i++)
        {
            
           // Checking for prime number
           int l = prime(i);
            
           // Checking for Adam number
           int k = adam(i);
           if ((l == 1) && (k == 1))
           {
               Console.Write(i + "\t");
           }
        }
    }
}
 
// Driver code
public static void Main(String[] args)
{
    int L = 5, R = 100;
    find(L, R);
}
}
 
// This code is contributed by Rohit_ranjan


输出:
11 13 31

时间复杂度: O(N 2 ) ,其中N是最大数R。