先决条件:查找自然数的所有除数
给定数字N。任务是找到N的所有回文除数。
例子:
Input: N = 66
Output: 1 2 3 6 11 22 33 66
Input: N = 808
Output: 1 2 4 8 101 202 404 808
方法:
- 使用本文讨论的方法找到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)