Check if all array elements can be converted to pronic numbers by rotating digits
Last Updated :
22 Feb, 2023
Given an array arr[] of size N, the task is to check if it is possible to convert all of the array elements to a pronic number by rotating the digits of array elements any number of times.
Examples:
Input: {321, 402, 246, 299}
Output: True
Explanation:
arr[0] ? Right rotation once modifies arr[0] to 132 (= 11 × 12).
arr[1] ? Right rotation once modifies arr[0] to 240 (= 15 × 16).
arr[2] ? Right rotation twice modifies arr[2] to 462 (= 21 × 22).
arr[3] ? Right rotation twice modifies arr[3] to 992 (= 31 × 32).
Input: {433, 653, 402, 186}
Output: False
Approach: Follow the steps below to solve the problem:
- Traverse the array and check for each array element, whether it is possible to convert it to a pronic number.
- For each array element, apply all the possible rotations and check after each rotation, whether the generated number is pronic or not.
- If it is not possible to convert any array element to a pronic number, print "False".
- Otherwise, print "True".
Below is the implementation of the above approach:
C++
// C++ program for the above approach
#include <bits/stdc++.h>
using namespace std;
// function to check Pronic Number
bool isPronic(int x)
{
for (int i = 0; i < (int)(sqrt(x)) + 1; i++)
{
// Checking Pronic Number
// by multiplying consecutive
// numbers
if (x == i * (i + 1))
{
return true;
}
}
return false;
}
// Function to check if any permutation
// of val is a pronic number or not
bool checkRot(int val)
{
string temp = to_string(val);
for (int i = 0; i < temp.length(); i++)
{
if (isPronic(stoi(temp)) == true)
{
return true;
}
temp = temp.substr(1, temp.size() - 1) + temp[0];
}
return false;
}
// Function to check if all array
// elements can be converted to
// a pronic number or not
bool check(int arr[], int N)
{
// Traverse the array
for (int i = 0; i < N; i++)
{
// If current element
// cannot be converted
// to a pronic number
if (checkRot(arr[i]) == false)
{
return false;
}
}
return true;
}
// Driven Program
int main()
{
// Given array
int arr[] = { 321, 402, 246, 299 };
int N = sizeof(arr) / sizeof(arr[0]);
// function call
cout << (check(arr, N) ? "True" : "False");
return 0;
}
// This code is contributed by Kingash.
Java
// Java program for the above approach
import java.io.*;
import java.lang.*;
import java.util.*;
class GFG {
// function to check Pronic Number
static boolean isPronic(int x)
{
for (int i = 0; i < (int)(Math.sqrt(x)) + 1; i++) {
// Checking Pronic Number
// by multiplying consecutive
// numbers
if (x == i * (i + 1)) {
return true;
}
}
return false;
}
// Function to check if any permutation
// of val is a pronic number or not
static boolean checkRot(int val)
{
String temp = Integer.toString(val);
for (int i = 0; i < temp.length(); i++)
{
if (isPronic(Integer.parseInt(temp)) == true) {
return true;
}
temp = temp.substring(1) + temp.charAt(0);
}
return false;
}
// Function to check if all array
// elements can be converted to
// a pronic number or not
static boolean check(int arr[], int N)
{
// Traverse the array
for (int i = 0; i < N; i++)
{
// If current element
// cannot be converted
// to a pronic number
if (checkRot(arr[i]) == false)
{
return false;
}
}
return true;
}
// Driver code
public static void main(String[] args)
{
// Given array
int arr[] = { 321, 402, 246, 299 };
int N = arr.length;
// Function call
System.out.println(
(check(arr, N) ? "True" : "False"));
}
}
// This code is contributed by Kingash.
Python3
# Python implementation of
# the above approach
# Function to check if a number
# is a pronic number or not
def isPronic(n):
for i in range(int(n**(1 / 2)) + 1):
if i * (i + 1) == n:
return True
return False
# Function to check if any permutation
# of n is a pronic number or not
def checkRot(n):
temp = str(n)
for i in range(len(temp)):
if isPronic(int(temp)):
return True
temp = temp[1:]+temp[0]
return False
# Function to check if all array
# elements can be converted to
# a pronic number or not
def check(arr):
# Traverse the array
for i in arr:
# If current element
# cannot be converted
# to a pronic number
if not checkRot(i):
return False
return True
# Driver Code
arr = [ 321, 402, 246, 299 ]
print(check(arr))
C#
// C# program for the above approach
using System;
using System.Collections.Generic;
class GFG{
// function to check Pronic Number
static bool isPronic(int x)
{
int val = (int)Math.Sqrt(x);
val += 1;
for (int i = 0; i < val; i++)
{
// Checking Pronic Number
// by multiplying consecutive
// numbers
if (x == i * (i + 1))
{
return true;
}
}
return false;
}
// Function to check if any permutation
// of val is a pronic number or not
static bool checkRot(int val)
{
string temp = val.ToString();
for (int i = 0; i < temp.Length; i++)
{
int a = Int32.Parse(temp);
if (isPronic(a) == true)
{
return true;
}
temp = temp.Substring(1, temp.Length - 1) + temp[0];
}
return false;
}
// Function to check if all array
// elements can be converted to
// a pronic number or not
static bool check(int []arr, int N)
{
// Traverse the array
for (int i = 0; i < N; i++)
{
// If current element
// cannot be converted
// to a pronic number
if (checkRot(arr[i]) == false)
{
return false;
}
}
return true;
}
// Driven Program
public static void Main()
{
// Given array
int []arr = { 321, 402, 246, 299 };
int N = arr.Length;
// function call
Console.WriteLine(check(arr, N) ? "True" : "False");
}
}
// This code is contributed by ipg2016107.
JavaScript
<script>
// Javascript program for the above approach
// function to check Pronic Number
function isPronic(x)
{
for (var i = 0; i < parseInt(Math.sqrt(x)) + 1; i++)
{
// Checking Pronic Number
// by multiplying consecutive
// numbers
if (x == i * (i + 1))
{
return true;
}
}
return false;
}
// Function to check if any permutation
// of val is a pronic number or not
function checkRot(val)
{
var temp = (val).toString();
for (var i = 0; i < temp.length; i++)
{
if (isPronic(parseInt(temp)) == true)
{
return true;
}
temp = temp.substring(1) + temp[0];
}
return false;
}
// Function to check if all array
// elements can be converted to
// a pronic number or not
function check(arr, N)
{
// Traverse the array
for (var i = 0; i < N; i++)
{
// If current element
// cannot be converted
// to a pronic number
if (checkRot(arr[i]) == false)
{
return false;
}
}
return true;
}
// Driven Program
// Given array
var arr = [ 321, 402, 246, 299 ]
var N = arr.length;
// function call
document.write(check(arr, N) ? "True" : "False");
// This code is contributed by noob2000.
</script>
Time Complexity: O(N * K * sqrt(val)), where N is the number of elements in the input array, K is the maximum length of a single element in the input array, and val is the maximum value of any element in the input array.
Auxiliary Space: O(1)
Similar Reads
Javascript Program to Check if all array elements can be converted to pronic numbers by rotating digits Given an array arr[] of size N, the task is to check if it is possible to convert all of the array elements to a pronic number by rotating the digits of array elements any number of times. Examples: Input: {321, 402, 246, 299} Output: True Explanation: arr[0] ? Right rotation once modifies arr[0] to
3 min read
Check if Array elements can be made equal by adding unit digit to the number Given an array arr[] of N integers, the task is to check whether it is possible to make all the array elements identical by applying the following option any number of times: Choose any number and add its unit digit to it. Examples: Input: arr[] = {1, 2, 4, 8, 24}Output: PossibleExplanation: For 1:
7 min read
Check if given Array can be made a permutation of 1 to N by reducing elements by half Given an array nums[] of size N, the task is to check whether the given array can be converted into a permutation of 1 to N after performing given operations any number of times (may be 0). An operation is defined as: Pick any element of the array say 'x', and replace it with 'x/2'. Note: In a permu
6 min read
Check if the number formed by concatenating all array elements is a Harshad number or not Given an array arr[] consisting of N integers, the task is to check if the number formed by concatenating all the array elements is a Harshad number or not. Examples: Input: arr[] = { 1, 35, 69, 60}Output: YesExplanation:The number formed by concatenating array elements is "1356960".Sum of digits of
6 min read
Check if it is possible to make array increasing or decreasing by rotating the array Given an array arr[] of N distinct elements, the task is to check if it is possible to make the array increasing or decreasing by rotating the array in any direction.Examples: Input: arr[] = {4, 5, 6, 2, 3} Output: Yes Array can be rotated as {2, 3, 4, 5, 6}Input: arr[] = {1, 2, 4, 3, 5} Output: No
13 min read
Check if all disks can be placed at a single rod based on given conditions Given an array arr[] consisting of N integers representing N rods each with a disk of radius arr[i], the task is to check if it is possible to move all disks to a single rod based on the condition that a disk at ith rod can be moved to jth rod only if: abs(i - j) = 1 and ith rod has only a single di
6 min read