📜  回文数除数

📅  最后修改于: 2021-04-27 20:31:30             🧑  作者: Mango

先决条件:查找自然数的所有除数
给定数字N。任务是找到N的所有回文除数。

例子:

方法:

  • 使用本文讨论的方法找到N的所有除数。
  • 对于每个除数D,检查D是否为回文。
  • 对所有除数重复上述步骤。

下面是上述方法的实现:

C++
// C++ program to find all the palindromic
// divisors of a number
#include "bits/stdc++.h"
using namespace std;
  
// Function to check is num is palindromic
// or not
bool isPalindrome(int n)
{
    // Convert n to string str
    string str = to_string(n);
  
    // Starting and ending index of
    // string str
    int s = 0, e = str.length() - 1;
    while (s < e) {
  
        // If char at s and e are
        // not equals then return
        // false
        if (str[s] != str[e]) {
            return false;
        }
        s++;
        e--;
    }
    return true;
}
  
// Function to find  palindromic divisors
void palindromicDivisors(int n)
{
    // To sore the palindromic divisors of
    // number n
    vector PalindromDivisors;
  
    for (int i = 1; i <= sqrt(n); i++) {
  
        // If n is divisible by i
        if (n % i == 0) {
  
            // Check if number is a perfect square
            if (n / i == i) {
  
                // Check divisor is palindromic,
                // then store it
                if (isPalindrome(i)) {
                    PalindromDivisors.push_back(i);
                }
            }
            else {
  
                // Check if divisors are palindrome
                if (isPalindrome(i)) {
                    PalindromDivisors.push_back(i);
                }
  
                // Check if n / divisors is palindromic
                // or not
                if (isPalindrome(n / i)) {
                    PalindromDivisors.push_back(n / i);
                }
            }
        }
    }
  
    // Print all palindromic divisors in sorted order
    sort(PalindromDivisors.begin(),
         PalindromDivisors.end());
  
    for (int i = 0; i < PalindromDivisors.size();
         i++) {
        cout << PalindromDivisors[i] << " ";
    }
}
  
// Driver code
int main()
{
    int n = 66;
  
    // Function call to find all palindromic
    // divisors
    palindromicDivisors(n);
}


Java
// Java program to find all the palindromic
// divisors of a number
import java.util.*;
  
class GFG
{
  
// Function to check is num is palindromic
// or not
static boolean isPalindrome(int n)
{
    // Convert n to String str
    String str = String.valueOf(n);
  
    // Starting and ending index of
    // String str
    int s = 0, e = str.length() - 1;
    while (s < e) {
  
        // If char at s and e are
        // not equals then return
        // false
        if (str.charAt(s) != str.charAt(e)) {
            return false;
        }
        s++;
        e--;
    }
    return true;
}
  
// Function to find palindromic divisors
static void palindromicDivisors(int n)
{
    // To sore the palindromic divisors of
    // number n
    Vector PalindromDivisors = new Vector();
  
    for (int i = 1; i <= Math.sqrt(n); i++) {
  
        // If n is divisible by i
        if (n % i == 0) {
  
            // Check if number is a perfect square
            if (n / i == i) {
  
                // Check divisor is palindromic,
                // then store it
                if (isPalindrome(i)) {
                    PalindromDivisors.add(i);
                }
            }
            else {
  
                // Check if divisors are palindrome
                if (isPalindrome(i)) {
                    PalindromDivisors.add(i);
                }
  
                // Check if n / divisors is palindromic
                // or not
                if (isPalindrome(n / i)) {
                    PalindromDivisors.add(n / i);
                }
            }
        }
    }
  
    // Print all palindromic divisors in sorted order
    Collections.sort(PalindromDivisors);
  
    for (int i = 0; i < PalindromDivisors.size();
        i++) {
        System.out.print(PalindromDivisors.get(i)+ " ");
    }
}
  
// Driver code
public static void main(String[] args)
{
    int n = 66;
  
    // Function call to find all palindromic
    // divisors
    palindromicDivisors(n);
}
}
  
// This code is contributed by 29AjayKumar


Python3
# Python3 program to find all the palindromic 
# divisors of a number
from math import sqrt;
  
# Function to check is num is palindromic 
# or not 
def isPalindrome(n) : 
  
    # Convert n to string str 
    string = str(n); 
  
    # Starting and ending index of 
    # string str 
    s = 0; e = len(string) - 1; 
    while (s < e) :
  
        # If char at s and e are 
        # not equals then return 
        # false 
        if (string[s] != string[e]) :
            return False; 
          
        s += 1; 
        e -= 1; 
      
    return True; 
  
# Function to find palindromic divisors 
def palindromicDivisors(n) : 
  
    # To sore the palindromic divisors of 
    # number n 
    PalindromDivisors = []; 
  
    for i in range(1, int(sqrt(n))) :
  
        # If n is divisible by i 
        if (n % i == 0) :
  
            # Check if number is a perfect square 
            if (n // i == i) :
  
                # Check divisor is palindromic, 
                # then store it 
                if (isPalindrome(i)) :
                    PalindromDivisors.append(i); 
              
            else :
  
                # Check if divisors are palindrome 
                if (isPalindrome(i)) :
                    PalindromDivisors.append(i); 
  
                # Check if n / divisors is palindromic 
                # or not 
                if (isPalindrome(n // i)) :
                    PalindromDivisors.append(n // i); 
  
    # Print all palindromic divisors in sorted order 
    PalindromDivisors.sort(); 
      
    for i in range(len( PalindromDivisors)) :
        print(PalindromDivisors[i] ,end=" "); 
  
# Driver code 
if __name__ == "__main__" : 
  
    n = 66; 
  
    # Function call to find all palindromic 
    # divisors 
    palindromicDivisors(n); 
  
# This code is contributed by AnkitRai01


C#
// C# program to find all the palindromic
// divisors of a number
using System;
using System.Collections.Generic;
  
class GFG
{
  
// Function to check is num is palindromic
// or not
static bool isPalindrome(int n)
{
    // Convert n to String str
    String str = String.Join("",n);
  
    // Starting and ending index of
    // String str
    int s = 0, e = str.Length - 1;
    while (s < e)
    {
  
        // If char at s and e are
        // not equals then return
        // false
        if (str[s] != str[e])
        {
            return false;
        }
        s++;
        e--;
    }
    return true;
}
  
// Function to find palindromic divisors
static void palindromicDivisors(int n)
{
    // To sore the palindromic divisors of
    // number n
    List PalindromDivisors = new List();
  
    for (int i = 1; i <= Math.Sqrt(n); i++) 
    {
  
        // If n is divisible by i
        if (n % i == 0) 
        {
  
            // Check if number is a perfect square
            if (n / i == i)
            {
  
                // Check divisor is palindromic,
                // then store it
                if (isPalindrome(i))
                {
                    PalindromDivisors.Add(i);
                }
            }
            else
            {
  
                // Check if divisors are palindrome
                if (isPalindrome(i))
                {
                    PalindromDivisors.Add(i);
                }
  
                // Check if n / divisors is palindromic
                // or not
                if (isPalindrome(n / i)) 
                {
                    PalindromDivisors.Add(n / i);
                }
            }
        }
    }
  
    // Print all palindromic divisors in sorted order
    PalindromDivisors.Sort();
  
    for (int i = 0; i < PalindromDivisors.Count;
        i++) 
    {
        Console.Write(PalindromDivisors[i]+ " ");
    }
}
  
// Driver code
public static void Main(String[] args)
{
    int n = 66;
  
    // Function call to find all palindromic
    // divisors
    palindromicDivisors(n);
}
}
  
// This code is contributed by PrinciRaj1992


输出:
1 2 3 6 11 22 33 66

时间复杂度: O(N * log N)