import java.util.*;
class SmallestPrimeFactor {
static final int MAXN = 1000000;
static int[] spf = new int[MAXN + 1]; // spf[i] -> smallest prime factor of i
static void computeSPF() {
// Initialize: har number ka spf khud se hi
for (int i = 2; i <= MAXN; i++) {
spf[i] = i;
}
// Sieve logic
for (int i
= 2; i
<= Math.
sqrt(MAXN
); i
++) { if (spf[i] == i) { // i prime hai
for (int j = i * i; j <= MAXN; j += i) {
if (spf[j] == j) {
spf[j] = i; // sabse chhota prime factor assign karo
}
}
}
}
}
// Function to get prime factorization of a number using spf[]
static List<Integer> getPrimeFactors(int n) {
List<Integer> factors = new ArrayList<>();
while (n != 1) {
factors.add(spf[n]);
n = n / spf[n];
}
return factors;
}
public static void main
(String[] args
) { // Precompute SPF for all numbers
computeSPF();
System.
out.
println("Smallest Prime Factors (2–20):"); for (int i = 2; i <= 20; i++) {
System.
out.
println(i
+ " -> " + spf
[i
]); }
}
}
CmltcG9ydCBqYXZhLnV0aWwuKjsKCmNsYXNzIFNtYWxsZXN0UHJpbWVGYWN0b3IgewogICAgc3RhdGljIGZpbmFsIGludCBNQVhOID0gMTAwMDAwMDsKICAgIHN0YXRpYyBpbnRbXSBzcGYgPSBuZXcgaW50W01BWE4gKyAxXTsgLy8gc3BmW2ldIC0+IHNtYWxsZXN0IHByaW1lIGZhY3RvciBvZiBpCiAgICBzdGF0aWMgdm9pZCBjb21wdXRlU1BGKCkgewogICAgICAgIC8vIEluaXRpYWxpemU6IGhhciBudW1iZXIga2Egc3BmIGtodWQgc2UgaGkKICAgICAgICBmb3IgKGludCBpID0gMjsgaSA8PSBNQVhOOyBpKyspIHsKICAgICAgICAgICAgc3BmW2ldID0gaTsKICAgICAgICB9CgogICAgICAgIC8vIFNpZXZlIGxvZ2ljCiAgICAgICAgZm9yIChpbnQgaSA9IDI7ICAgaSA8PSBNYXRoLnNxcnQoTUFYTik7IGkrKykgewogICAgICAgICAgICBpZiAoc3BmW2ldID09IGkpIHsgLy8gaSBwcmltZSBoYWkKICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSBpICogaTsgaiA8PSBNQVhOOyBqICs9IGkpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoc3BmW2pdID09IGopIHsKICAgICAgICAgICAgICAgICAgICAgICAgc3BmW2pdID0gaTsgLy8gc2Fic2UgY2hob3RhIHByaW1lIGZhY3RvciBhc3NpZ24ga2FybwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KIAogICAgLy8gRnVuY3Rpb24gdG8gZ2V0IHByaW1lIGZhY3Rvcml6YXRpb24gb2YgYSBudW1iZXIgdXNpbmcgc3BmW10KICAgIHN0YXRpYyBMaXN0PEludGVnZXI+IGdldFByaW1lRmFjdG9ycyhpbnQgbikgewogICAgICAgIExpc3Q8SW50ZWdlcj4gZmFjdG9ycyA9IG5ldyBBcnJheUxpc3Q8PigpOwogICAgICAgIHdoaWxlIChuICE9IDEpIHsKICAgICAgICAgICAgZmFjdG9ycy5hZGQoc3BmW25dKTsKICAgICAgICAgICAgbiA9IG4gLyBzcGZbbl07CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWN0b3JzOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAvLyBQcmVjb21wdXRlIFNQRiBmb3IgYWxsIG51bWJlcnMKICAgICAgICBjb21wdXRlU1BGKCk7CgogICAgICAgIAogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU21hbGxlc3QgUHJpbWUgRmFjdG9ycyAoMuKAkzIwKToiKTsKICAgICAgICBmb3IgKGludCBpID0gMjsgaSA8PSAyMDsgaSsrKSB7CiAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihpICsgIiAtPiAiICsgc3BmW2ldKTsKICAgICAgICB9CgogICAgfQp9Cg==