-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathHighestPrime.cpp
More file actions
65 lines (50 loc) · 1.32 KB
/
HighestPrime.cpp
File metadata and controls
65 lines (50 loc) · 1.32 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
// http://www.geeksforgeeks.org/find-highest-occurring-digit-prime-numbers-range/
// http://practice.geeksforgeeks.org/problems/find-the-highest-occurring-digit-in-prime-numbers-in-a-range/0
#include <iostream>
void sieve(bool prime[], int r) {
for(int i = 2; i*i <= r; i++) {
if(prime[i])
for(int j = i+i; j <= r; j += i)
prime[j] = false;
}
}
int maxDigitInRange(bool prime[], int l, int r) {
int freq[10] = {0};
for(int i = l; i <= r; i++)
if(prime[i]) {
int p = i;
while(p) {
freq[p%10]++;
p /= 10;
}
}
int max = freq[0];
int ans = -1;
for (int i = 0; i <= 9; i++) {
if(freq[i] != 0 && freq[i] >= max) {
max = freq[i];
ans = i;
}
}
return ans;
}
int main() {
int t;
std::cin >> t;
int maxR = 0;
int arr[t][2];
for(int i = 0; i < t; i++) {
std::cin >> arr[i][0] >> arr[i][1];
if(arr[i][1] > maxR) {
maxR = arr[i][1];
}
}
bool prime[maxR+1];
memset(prime, true, sizeof(prime));
sieve(prime, maxR);
for(int i = 0; i < t; i++) {
int result = maxDigitInRange(prime, arr[i][0], arr[i][1]);
std::cout << result << '\n';
}
return 0;
}