辉煌数字是数字N ,它是数字相同的两个素数的乘积。
很少有辉煌数字是:
4, 6, 9, 10, 14, 15, 21, 25, 35, 49….
检查N是否为亮数
给定一个数字N ,任务是检查N是否是一个辉煌数字。如果N是一个辉煌数字,则打印“是”,否则打印“否” 。
例子:
Input: N = 1711
Output: Yes
Explanation:
1711 = 29*59 and both 29 and 59 have two digits.
Input: N = 16
Output: No
方法:这个想法是使用Eratosthenes筛子找到所有小于或等于给定数N的素数。一旦有了一个告诉所有素数的数组,我们就可以遍历该数组以查找具有给定乘积的一对。我们将使用Eratosthenes筛子找到具有给定乘积的两个质数,并检查该对是否具有相同的位数。
下面是上述方法的实现:
C++
// C++ implementation for the
// above approach
#include
using namespace std;
// Function to generate all prime
// numbers less than n
bool SieveOfEratosthenes(int n,
bool isPrime[])
{
// Initialize all entries of
// boolean array as true.
// A value in isPrime[i]
// will finally be false
// if i is Not a prime
isPrime[0] = isPrime[1] = false;
for (int i = 2; i <= n; i++)
isPrime[i] = true;
for (int p = 2; p * p <= n; p++) {
// If isPrime[p] is not changed,
// then it is a prime
if (isPrime[p] == true) {
// Update all multiples of p
for (int i = p * 2; i <= n; i += p)
isPrime[i] = false;
}
}
}
// Function to return the number
// of digits in a number
int countDigit(long long n)
{
return floor(log10(n) + 1);
}
// Function to check if N is a
// Brilliant number
bool isBrilliant(int n)
{
int flag = 0;
// Generating primes using Sieve
bool isPrime[n + 1];
SieveOfEratosthenes(n, isPrime);
// Traversing all numbers
// to find first pair
for (int i = 2; i < n; i++) {
int x = n / i;
if (isPrime[i] &&
isPrime[x] and x * i == n) {
if (countDigit(i) == countDigit(x))
return true;
}
}
return false;
}
// Driver Code
int main()
{
// Given Number
int n = 1711;
// Function Call
if (isBrilliant(n))
cout << "Yes";
else
cout << "No";
return 0;
}
Java
// Java implementation for the
// above approach
import java.util.*;
class GFG{
// Function to generate all prime
// numbers less than n
static void SieveOfEratosthenes(int n,
boolean isPrime[])
{
// Initialize all entries of
// boolean array as true.
// A value in isPrime[i]
// will finally be false
// if i is Not a prime
isPrime[0] = isPrime[1] = false;
for (int i = 2; i <= n; i++)
isPrime[i] = true;
for (int p = 2; p * p <= n; p++)
{
// If isPrime[p] is not changed,
// then it is a prime
if (isPrime[p] == true)
{
// Update all multiples of p
for (int i = p * 2; i <= n; i += p)
isPrime[i] = false;
}
}
}
// Function to return the number
// of digits in a number
static int countDigit(int n)
{
int count = 0;
while (n != 0)
{
n = n / 10;
++count;
}
return count;
}
// Function to check if N is a
// Brilliant number
static boolean isBrilliant(int n)
{
int flag = 0;
// Generating primes using Sieve
boolean isPrime[] = new boolean[n + 1];
SieveOfEratosthenes(n, isPrime);
// Traversing all numbers
// to find first pair
for (int i = 2; i < n; i++)
{
int x = n / i;
if (isPrime[i] &&
isPrime[x] && (x * i) == n)
{
if (countDigit(i) == countDigit(x))
return true;
}
}
return false;
}
// Driver Code
public static void main (String[] args)
{
// Given Number
int n = 1711;
// Function Call
if (isBrilliant(n))
System.out.print("Yes");
else
System.out.print("No");
}
}
// This code is contributed by Ritik Bansal
Python3
# Python3 program for the
# above approach
import math
# Function to generate all prime
# numbers less than n
def SieveOfEratosthenes(n, isPrime):
# Initialize all entries of
# boolean array as true.
# A value in isPrime[i]
# will finally be false
# if i is Not a prime
isPrime[0] = isPrime[1] = False
for i in range(2, n + 1, 1):
isPrime[i] = True
p = 2
while(p * p <= n ):
# If isPrime[p] is not changed,
# then it is a prime
if (isPrime[p] == True):
# Update all multiples of p
for i in range(p * 2, n + 1, p):
isPrime[i] = False
p += 1
# Function to return the number
# of digits in a number
def countDigit(n):
return math.floor(math.log10(n) + 1)
# Function to check if N is a
# Brilliant number
def isBrilliant(n):
flag = 0
# Generating primes using Sieve
isPrime = [0] * (n + 1)
SieveOfEratosthenes(n, isPrime)
# Traversing all numbers
# to find first pair
for i in range(2, n, 1):
x = n // i
if (isPrime[i] and
isPrime[x] and x * i == n):
if (countDigit(i) == countDigit(x)):
return True
return False
# Driver Code
# Given Number
n = 1711
# Function Call
if (isBrilliant(n)):
print("Yes")
else:
print("No")
# This code is contributed by sanjoy_62
C#
// C# implementation for the
// above approach
using System;
class GFG{
// Function to generate all prime
// numbers less than n
static void SieveOfEratosthenes(int n,
bool []isPrime)
{
// Initialize all entries of
// boolean array as true.
// A value in isPrime[i]
// will finally be false
// if i is Not a prime
isPrime[0] = isPrime[1] = false;
for(int i = 2; i <= n; i++)
isPrime[i] = true;
for(int p = 2; p * p <= n; p++)
{
// If isPrime[p] is not changed,
// then it is a prime
if (isPrime[p] == true)
{
// Update all multiples of p
for(int i = p * 2; i <= n; i += p)
isPrime[i] = false;
}
}
}
// Function to return the number
// of digits in a number
static int countDigit(int n)
{
int count = 0;
while (n != 0)
{
n = n / 10;
++count;
}
return count;
}
// Function to check if N is a
// Brilliant number
static bool isBrilliant(int n)
{
//int flag = 0;
// Generating primes using Sieve
bool []isPrime = new bool[n + 1];
SieveOfEratosthenes(n, isPrime);
// Traversing all numbers
// to find first pair
for(int i = 2; i < n; i++)
{
int x = n / i;
if (isPrime[i] &&
isPrime[x] && (x * i) == n)
{
if (countDigit(i) == countDigit(x))
return true;
}
}
return false;
}
// Driver Code
public static void Main()
{
// Given Number
int n = 1711;
// Function Call
if (isBrilliant(n))
Console.Write("Yes");
else
Console.Write("No");
}
}
// This code is contributed by Code_Mech
Javascript
输出:
Yes
参考: http : //oeis.org/A078972