Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.*;
- public class Main
- {
- static int[] primes = new int[] {
- 02, 03, 05, 07, 11, 13, 17, 19, 23, 29,
- 31, 37, 41, 43, 47, 53, 59, 61, 67, 71,
- 73, 79, 83, 89, 97, 101 };
- static boolean contains(long x, int l, int r) {
- if (r >= l) {
- int mid = l + (r - l) / 2;
- if (primes[mid] == x)
- return true;
- if (primes[mid] > x)
- return contains(x, l, mid - 1);
- return contains(x, mid + 1, r);
- }
- return false;
- }
- static int find(long x, int l, int r) {
- if (r >= l) {
- int mid = l + (r - l) / 2;
- if (primes[mid] == x)
- return mid;
- if (primes[mid] > x)
- return find(x, l, mid - 1);
- return find(x, mid + 1, r);
- }
- return -1;
- }
- public static void main(String[] args) {
- Scanner scan = new Scanner(System.in);
- ArrayList<Long> factorization = new ArrayList<Long>();
- StringBuilder str = new StringBuilder();
- long num = scan.nextLong();
- while (!contains(num, 0, 25)) {
- long num_half = num/2;
- for (int i = 0; i < 26; i++) {
- int divisor = primes[i];
- if (divisor > num_half) break;
- boolean divisible = (long)(num/divisor) * divisor == num;
- if (divisible) {
- factorization.add((long)divisor);
- str.append((char)(i + 97));
- num /= divisor;
- num_half = num/2;
- break;
- }
- }
- }
- factorization.add(num);
- str.append((char)(find(num, 0, 25) + 97));
- for (int i = 0; i < factorization.size(); i++) {
- System.out.println(factorization.get(i));
- }
- System.out.println(str);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement