-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathPrimeFibonacci.java
More file actions
109 lines (88 loc) · 3.8 KB
/
Copy pathPrimeFibonacci.java
File metadata and controls
109 lines (88 loc) · 3.8 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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
import java.util.*;
public class PrimeFibonacci {
public static void main(String[] args) {
Scanner abhi = new Scanner(System.in);
int firstNumber;
int secondNumber;
long result;
firstNumber = abhi.nextInt();
secondNumber = abhi.nextInt();
result = solvePrimeFibonacci(firstNumber, secondNumber);
System.out.println(result);
abhi.close();
}
public static long solvePrimeFibonacci(int startRange, int endRange) {
// Idhar humko prime numbers between startRange and endRange Nikalne hai
List<Integer> firstPrimeList = findPrimesInRange(startRange, endRange);
// Phir saare possible unique combinations
Set<Integer> combinationSet = generateAllCombinations(firstPrimeList);
// Phir un combinations me se prime numbers nikalne hain
List<Integer> secondPrimeList = findPrimesFromSet(combinationSet);
int smallestPrime = Collections.min(secondPrimeList);
int largestPrime = Collections.max(secondPrimeList);
int primeCount = secondPrimeList.size();
return generateFibonacciLastNumber(smallestPrime, largestPrime, primeCount);
}
public static boolean isPrime(int number) {
if (number < 2) return false;
if (number == 2) return true;
if (number % 2 == 0) return false;
for (int divisor = 3; divisor * divisor <= number; divisor += 2) {
if (number % divisor == 0) {
return false;
}
}
return true;
}
public static List<Integer> findPrimesInRange(int startRange, int endRange) {
List<Integer> primeList = new ArrayList<>();
for (int currNumber = startRange; currNumber <= endRange; currNumber++) {
if (isPrime(currNumber)) {
primeList.add(currNumber);
}
}
return primeList;
}
public static Set<Integer> generateAllCombinations(List<Integer> primeList) {
Set<Integer> combinationSet = new HashSet<>();
int listSize = primeList.size();
for (int firstIndex = 0; firstIndex < listSize; firstIndex++) {
for (int secondIndex = 0; secondIndex < listSize; secondIndex++) {
if (firstIndex != secondIndex) {
String firstPrime = String.valueOf(primeList.get(firstIndex));
String secondPrime = String.valueOf(primeList.get(secondIndex));
String combinedNumber = firstPrime + secondPrime;
try {
int combinationValue = Integer.parseInt(combinedNumber);
combinationSet.add(combinationValue);
} catch (NumberFormatException exception) {
continue;
}
}
}
}
return combinationSet;
}
public static List<Integer> findPrimesFromSet(Set<Integer> combinationSet) {
List<Integer> primeList = new ArrayList<>();
for (int currNumber : combinationSet) {
if (isPrime(currNumber)) {
primeList.add(currNumber);
}
}
return primeList;
}
public static long generateFibonacciLastNumber(int firstTerm, int secondTerm, int termCount) {
if (termCount == 1) return firstTerm;
if (termCount == 2) return secondTerm;
long prevTerm = firstTerm;
long currTerm = secondTerm;
long nextTerm = 0;
for (int termIndex = 3; termIndex <= termCount; termIndex++) {
nextTerm = prevTerm + currTerm;
prevTerm = currTerm;
currTerm = nextTerm;
}
return currTerm;
}
}