给定范围为L到R ,任务是找到位于L和R(包括两端)之间的质数中出现最高的数字。如果多个数字具有相同的最高频率,请打印最大的数字。如果L和R之间没有质数,则输出-1。
例子:
Input : L = 1 and R = 20.
Output : 1
Prime number between 1 and 20 are 2, 3, 5, 7, 11, 13, 17, 19.
1 occur maximum i.e 5 times among 0 to 9.
这个想法是从L到R开始,检查数字是否为质数。如果为质数,则增加质数中存在的数字的频率(使用数组)。要检查数字是否为质数,我们可以使用Eratosthenes筛。
以下是此方法的实现:
C++
// C++ program to find the highest occurring digit
// in prime numbers in a range L to R.
#include
using namespace std;
// Sieve of Eratosthenes
void sieve(bool prime[], int n)
{
for (int p = 2; p * p <= n; p++)
{
if (prime[p] == false)
for (int i = p*2; i <= n; i+=p)
prime[i] = true;
}
}
// Returns maximum occurring digits in primes
// from l to r.
int maxDigitInPrimes(int L, int R)
{
bool prime[R+1];
memset(prime, 0, sizeof(prime));
// Finding the prime number up to R.
sieve(prime, R);
// Initialse frequency of all digit to 0.
int freq[10] = { 0 };
int val;
// For all number between L to R, check if prime
// or not. If prime, incrementing the frequency
// of digits present in the prime number.
for (int i = L; i <= R; i++)
{
if (!prime[i])
{
int p = i; // If i is prime
while (p)
{
freq[p%10]++;
p /= 10;
}
}
}
// Finding digit with highest frequency.
int max = freq[0], ans = 0;
for (int j = 1; j < 10; j++)
{
if (max <= freq[j])
{
max = freq[j];
ans = j;
}
}
return ans;
}
// Driven Program
int main()
{
int L = 1, R = 20;
cout << maxDigitInPrimes(L, R) << endl;
return 0;
}
Java
// Java program to find the highest occurring digit
// in prime numbers in a range L to R.
import java.util.Arrays;
class GFG {
// Sieve of Eratosthenes
static void sieve(boolean prime[], int n) {
for (int p = 2; p * p <= n; p++) {
if (prime[p] == false)
for (int i = p * 2; i <= n; i += p)
prime[i] = true;
}
}
// Returns maximum occurring digits in primes
// from l to r.
static int maxDigitInPrimes(int L, int R) {
boolean prime[] = new boolean[R + 1];
Arrays.fill(prime, false);
// Finding the prime number up to R.
sieve(prime, R);
// Initialse frequency of all digit to 0.
int freq[] = new int[10];
int val;
// For all number between L to R, check if
// prime or not. If prime, incrementing
// the frequency of digits present in the
// prime number.
for (int i = L; i <= R; i++) {
if (!prime[i]) {
int p = i; // If i is prime
while (p > 0) {
freq[p % 10]++;
p /= 10;
}
}
}
// Finding digit with highest frequency.
int max = freq[0], ans = 0;
for (int j = 1; j < 10; j++) {
if (max <= freq[j]) {
max = freq[j];
ans = j;
}
}
return ans;
}
// Driver code
public static void main(String[] args) {
int L = 1, R = 20;
System.out.println(maxDigitInPrimes(L, R));
}
}
// This code is contributed by Anant Agarwal.
Python 3
# Python 3 program to find the highest
# occurring digit in prime numbers
# in a range L to R.
# Sieve of Eratosthenes
def sieve(prime, n):
p = 2
while p * p <= n :
if (prime[p] == False):
for i in range(p * 2, n, p):
prime[i] = True
p += 1
# Returns maximum occurring digits
# in primes from l to r.
def maxDigitInPrimes(L, R):
prime = [0] * (R + 1)
# Finding the prime number up to R.
sieve(prime, R)
# Initialse frequency of all
# digit to 0.
freq = [0] * 10
# For all number between L to R,
# check if prime or not. If prime,
# incrementing the frequency
# of digits present in the prime number.
for i in range(L, R + 1):
if (not prime[i]):
p = i # If i is prime
while (p):
freq[p % 10] += 1
p //= 10
# Finding digit with highest frequency.
max = freq[0]
ans = 0
for j in range(1, 10):
if (max <= freq[j]):
max = freq[j]
ans = j
return ans
# Driver Code
if __name__=="__main__":
L = 1
R = 20
print(maxDigitInPrimes(L, R))
# This code is contributed by ita_c
C#
// C# program to find the highest
// occurring digit in prime numbers
// in a range L to R.
using System;
class GFG {
// Sieve of Eratosthenes
static void sieve(bool []prime, int n)
{
for (int p = 2; p * p <= n; p++)
{
if (prime[p] == false)
for (int i = p * 2; i <= n; i += p)
prime[i] = true;
}
}
// Returns maximum occurring digits
// in primes from l to r.
static int maxDigitInPrimes(int L, int R) {
bool []prime = new bool[R + 1];
for(int i = 0; i < R+1; i++)
prime[i] = false;
// Finding the prime number up to R.
sieve(prime, R);
// Initialse frequency of all digit to 0.
int []freq = new int[10];
// For all number between L to R, check if
// prime or not. If prime, incrementing
// the frequency of digits present in the
// prime number.
for (int i = L; i <= R; i++) {
if (!prime[i])
{
int p = i; // If i is prime
while (p > 0) {
freq[p % 10]++;
p /= 10;
}
}
}
// Finding digit with highest frequency.
int max = freq[0], ans = 0;
for (int j = 1; j < 10; j++)
{
if (max <= freq[j]) {
max = freq[j];
ans = j;
}
}
return ans;
}
// Driver code
public static void Main()
{
int L = 1, R = 20;
Console.Write(maxDigitInPrimes(L, R));
}
}
// This code is contributed by nitin mittal.
PHP
Javascript
输出:
1