Palindromic divisors of a number
Last Updated :
26 Dec, 2022
Prerequisite: Find all divisors of a natural number
Given a number N. The task is to find all the palindromic divisors of N.
Examples:
Input: N = 66
Output: 1 2 3 6 11 22 33 66
Input: N = 808
Output: 1 2 4 8 101 202 404 808
Approach:
- Find all the divisors of N using approach discussed in this article.
- For each divisors D, check whether D is palindromic or not.
- Repeat the above step for all the divisors.
Below is the implementation of the above approach:
C++14
#include "bits/stdc++.h"
using namespace std;
bool isPalindrome( int n)
{
string str = to_string(n);
int s = 0, e = str.length() - 1;
while (s < e) {
if (str[s] != str[e]) {
return false ;
}
s++;
e--;
}
return true ;
}
void palindromicDivisors( int n)
{
vector< int > PalindromDivisors;
for ( int i = 1; i <= sqrt (n); i++) {
if (n % i == 0) {
if (n / i == i) {
if (isPalindrome(i)) {
PalindromDivisors.push_back(i);
}
}
else {
if (isPalindrome(i)) {
PalindromDivisors.push_back(i);
}
if (isPalindrome(n / i)) {
PalindromDivisors.push_back(n / i);
}
}
}
}
sort(PalindromDivisors.begin(),
PalindromDivisors.end());
for ( int i = 0; i < PalindromDivisors.size();
i++) {
cout << PalindromDivisors[i] << " " ;
}
}
int main()
{
int n = 66;
palindromicDivisors(n);
}
|
Java
import java.util.*;
class GFG
{
static boolean isPalindrome( int n)
{
String str = String.valueOf(n);
int s = 0 , e = str.length() - 1 ;
while (s < e) {
if (str.charAt(s) != str.charAt(e)) {
return false ;
}
s++;
e--;
}
return true ;
}
static void palindromicDivisors( int n)
{
Vector<Integer> PalindromDivisors = new Vector<Integer>();
for ( int i = 1 ; i <= Math.sqrt(n); i++) {
if (n % i == 0 ) {
if (n / i == i) {
if (isPalindrome(i)) {
PalindromDivisors.add(i);
}
}
else {
if (isPalindrome(i)) {
PalindromDivisors.add(i);
}
if (isPalindrome(n / i)) {
PalindromDivisors.add(n / i);
}
}
}
}
Collections.sort(PalindromDivisors);
for ( int i = 0 ; i < PalindromDivisors.size();
i++) {
System.out.print(PalindromDivisors.get(i)+ " " );
}
}
public static void main(String[] args)
{
int n = 66 ;
palindromicDivisors(n);
}
}
|
Python3
from math import sqrt;
def isPalindrome(n) :
string = str (n);
s = 0 ; e = len (string) - 1 ;
while (s < e) :
if (string[s] ! = string[e]) :
return False ;
s + = 1 ;
e - = 1 ;
return True ;
def palindromicDivisors(n) :
PalindromDivisors = [];
for i in range ( 1 , int (sqrt(n))) :
if (n % i = = 0 ) :
if (n / / i = = i) :
if (isPalindrome(i)) :
PalindromDivisors.append(i);
else :
if (isPalindrome(i)) :
PalindromDivisors.append(i);
if (isPalindrome(n / / i)) :
PalindromDivisors.append(n / / i);
PalindromDivisors.sort();
for i in range ( len ( PalindromDivisors)) :
print (PalindromDivisors[i] ,end = " " );
if __name__ = = "__main__" :
n = 66 ;
palindromicDivisors(n);
|
C#
using System;
using System.Collections.Generic;
class GFG
{
static bool isPalindrome( int n)
{
String str = String.Join( "" ,n);
int s = 0, e = str.Length - 1;
while (s < e)
{
if (str[s] != str[e])
{
return false ;
}
s++;
e--;
}
return true ;
}
static void palindromicDivisors( int n)
{
List< int > PalindromDivisors = new List< int >();
for ( int i = 1; i <= Math.Sqrt(n); i++)
{
if (n % i == 0)
{
if (n / i == i)
{
if (isPalindrome(i))
{
PalindromDivisors.Add(i);
}
}
else
{
if (isPalindrome(i))
{
PalindromDivisors.Add(i);
}
if (isPalindrome(n / i))
{
PalindromDivisors.Add(n / i);
}
}
}
}
PalindromDivisors.Sort();
for ( int i = 0; i < PalindromDivisors.Count;
i++)
{
Console.Write(PalindromDivisors[i]+ " " );
}
}
public static void Main(String[] args)
{
int n = 66;
palindromicDivisors(n);
}
}
|
Javascript
<script>
function isPalindrome(n)
{
var str = (n.toString());
var s = 0, e = str.length - 1;
while (s < e)
{
if (str[s] != str[e])
{
return false ;
}
s++;
e--;
}
return true ;
}
function palindromicDivisors(n)
{
var PalindromDivisors = [];
for ( var i = 1; i <= parseInt(Math.sqrt(n)); i++)
{
if (n % i == 0)
{
if (n / i == i)
{
if (isPalindrome(i))
{
PalindromDivisors.push(i);
}
}
else
{
if (isPalindrome(i))
{
PalindromDivisors.push(i);
}
if (isPalindrome(n / i))
{
PalindromDivisors.push(n / i);
}
}
}
}
PalindromDivisors.sort((a, b) => a - b)
for ( var i = 0;
i < PalindromDivisors.length; i++)
{
document.write( PalindromDivisors[i] + " " );
}
}
var n = 66;
palindromicDivisors(n);
</script>
|
Output:
1 2 3 6 11 22 33 66
Time Complexity: O(N*log N)
Auxiliary Space: O(sqrt(n))
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...