Pages

Showing posts with label Primes. Show all posts
Showing posts with label Primes. Show all posts

Tuesday, 22 January 2013

UVA - 160 - Factors and Factorials

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuffer sb = new StringBuffer();
        String m="";
        int[][]arr=new int[101][100];
        for(int i=2;i<arr.length;i++){
            System.arraycopy(arr[i-1], 2, arr[i], 2, 100 - 2);
            LinkedList<Integer> list=primeFactors(i);
            while(!list.isEmpty()){
                int temp=list.remove();
                arr[i][temp]++;
            }
        }
        while(true){
            int x=Integer.parseInt(br.readLine());
            if(x==0){
                break;
            }
            String str=String.format("%3d! =", x);
            sb.append(str);
            int counter=0;
            boolean flag=false;
            for(int i=2;i<100;i++){
                if(arr[x][i]>0){
                    if(flag){
                       sb.append("      ");
                       flag=false;
                    }
                    str=String.format("%3d", arr[x][i]);
                    sb.append(str);
                    counter++;
                    if(counter%15==0){
                        sb.append("\n");
                        flag=true;
                    }
                }
            }
            if(!flag){
                sb.append("\n");
            }
        }
        System.out.print(sb);
    }
   
    static LinkedList<Integer> primeFactors(int x){
        LinkedList<Integer> list=new LinkedList<Integer>();
        if(x<0){
            list.add(-1);
        }
        int temp=Math.abs(x);
        boolean notprime=false,entered=false;
        while(temp>1 &&!notprime){
            entered=false;
            for(int i=2;i<Math.sqrt(temp)+1;i++){
                if(temp%i==0){
                    list.add(i);
                    temp/=i;
                    notprime=false;
                    entered=true;
                    break;
                }
            }
            if(!entered)
                 notprime=true;
        }
        if(notprime){
                list.add(temp);
            }
        return list;
    }
}

Sunday, 30 December 2012

UVA - 11466 - Largest Prime Divisor

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuffer sb = new StringBuffer("");
        while (true) {
            long x = Math.abs(Long.parseLong(br.readLine()));
            if (x == 0) {
                break;
            }
            long temp = -1;
            long counterP=0;
            long tempX=x;
            for (int i = 2; i < Math.sqrt(x) + 1; i++) {
                while(tempX % i == 0) {
                    if(temp!=i){
                        counterP++;
                    }
                    temp=i;
                    tempX/=i;
                }
            }
            if(x!=tempX &&tempX!=1){
                temp=tempX;
                counterP++;
            }
            if(counterP<2)
                sb.append(-1).append("\n");
            else
                sb.append(temp).append("\n");
        }
        System.out.print(sb);
    }
}

Friday, 7 December 2012

UVA - 12542 - Prime Substring

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;

public class Main {
  
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuffer sb = new StringBuffer("");
        int[]arr=sievePrime(1000*100);
        while(true){
            String str=br.readLine();
            if(str.equals("0")){
                break;
            }
            for(int i=arr.length-1;i>-1;i--){
                if((arr[i]+"").length()<str.length()){
                if(findPattern (arr[i]+"",str)){
                    sb.append(arr[i]).append("\n");
                    break;
                }
                }
            }
        }
        System.out.print(sb);
    }
  
     static boolean findPattern(String Pattern,String str){
        int count=0;
        for(int i=0,j=0;i<str.length();i++){
            if(Pattern.charAt(j)==str.charAt(i)){
                count++;
                j++;
            }else{
                j=0;
                count=0;
            }
            if(count==Pattern.length()){
                return true;
            }
        }
        return false;
    }
     static int[] sievePrime(int x) {
        boolean[] notPrime = new boolean[x + 1];
        notPrime[0] = true;
        notPrime[1] = true;
        for (int i = 2; i * i < x + 1; i++) {
            if (!notPrime[i]) {
                for (int j = i; i * j < x + 1; j++) {
                    notPrime[i * j] = true;
                }
            }
        }
        LinkedList<Integer> list=new LinkedList<Integer>();
        for (int i = 2;i < x; i++){
            if(!notPrime[i])
                list.add(i);
        }
        int arr[]=new int[list.size()];
        for (int i = 0;i < arr.length; i++){
            arr[i]=list.get(i);
        }
        return arr;
    }
}

Tuesday, 13 November 2012

UVA - 10042 - Smith Numbers

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuffer sb = new StringBuffer("");
        int[]primeFact=sievePrime(100000);
        int cases=Integer.parseInt(br.readLine());
        for(int i=0;i<cases;i++) {
            int x=Integer.parseInt(br.readLine());
            int temp=x+1,sumN=0,sumP=0;
            while(true){
                sumN=0;
                sumP=0;
                if(!isPrime(temp, primeFact)){
                    sumP=digitSum(temp);
                    int primes[]=primeFactors(temp);
                    for(int j=0;j<primes.length;j++){
                        int num=primes[j];
                        sumN+=digitSum(num);
                    }
                    if(sumP==sumN){
                        break;
                    }
                }
                temp++;
            }
            sb.append(temp).append("\n");
        }
        System.out.print(sb);
    }
  
    static int[] sievePrime(int x) {
        boolean[] notPrime = new boolean[x + 1];
        notPrime[0] = true;
        notPrime[1] = true;
        for (int i = 2; i * i < x + 1; i++) {
            if (!notPrime[i]) {
                for (int j = i; i * j < x + 1; j++) {
                    notPrime[i * j] = true;
                }
            }
        }
        LinkedList<Integer> list=new LinkedList<Integer>();
        for (int i = 2;i < x; i++){
            if(!notPrime[i])
                list.add(i);
        }
        int arr[]=new int[list.size()];
        for (int i = 0;i < arr.length; i++){
            arr[i]=list.get(i);
        }
        return arr;
    }
  
    static int[] primeFactors(int x){
        LinkedList<Integer> list=new LinkedList<Integer>();
        int temp=x;
        boolean notprime=false,entered=false;
        while(temp>1 &&!notprime){
            entered=false;
            for(int i=2;i<Math.sqrt(temp)+1;i++){
                if(temp%i==0){
                    list.add(i);
                    temp/=i;
                    notprime=false;
                    entered=true;
                    break;
                }
            }
            if(!entered)
                 notprime=true;
        }
        if(notprime){
                list.add(temp);
            }
        int[] arr=new int[list.size()];
        for(int i=0;i<arr.length;i++){
            arr[i]=list.get(i);
        }
        return arr;
    }
  
    static int digitSum(int temp) {
        int sumP=0;
        int num=temp;
        while (num > 0) {
            sumP += num % 10;
            num /= 10;
        }
        return sumP;
    }
  
    static boolean isPrime(int x,int[]arr){
        for(int i=0;i<arr.length && x>arr[i];i++){
            if(x%arr[i]==0)
                return false;
        }
        return true;
    }
}