본문 바로가기

카테고리 없음

Jungol_Beginner_수학2

1009 : 각 자리수의 역과 합(Number Reverse)

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
 
public class Main {
    
    public static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
    
    public static void main(String[] args) throws IOException {
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        
        int original[] = new int [11];
        int i, j;
        int cnt = 0;
        
        for (i = 0; ; i++) {
            original[i] = Integer.parseInt(in.readLine());
            if (original[i] == 0) break;
            cnt++;
        }
        for (i = 0; i < cnt; i++) {
            bw.write(String.format(" %d\n", f(original[i])));
        }
        bw.flush();
    }
 
    private static Object f(int num) throws IOException {
        // TODO Auto-generated method stub
        int sum = 0;
        int flag=0;
        while (num > 0) {
            if(flag==1 || num%10!=0)
            {
                bw.write(String.format("%d", num % 10));
                flag=1;
            }
            
            sum = sum + num % 10;
            num = num / 10;
        }
        return sum;
    }
}

숫자들을 입력받아 그 숫자를 역으로 출력하고 각 자리수의 합을 더하는 문제.


2811 : 소수와 합성수

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
 
public class Main {
 
    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(in.readLine());
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
     
        int number[] = new int [6];
        int i, j;
         
        for (i = 0; i < 5; i++) {
            number[i] = Integer.parseInt(st.nextToken());
        }
             
        for (i = 0; i < 5; i++) {
            if (number[i]==1){
                bw.write("number one\n");
            }
            else if (isPrime(number[i])) {
                bw.write("prime number\n");             
            }
            else {
                bw.write("composite number\n");
            }
            bw.flush();
             
        }
         
    }
     
    public static boolean isPrime(int num) {
        if(num<2) return false;
        for(int i=2;i<=Math.sqrt(num);i++) {
            if(num%i==0) return false;
        }
        return true;
    }
}

숫자를 입력받아 그 숫자가 소수인지, 합성수인지 판단하는 문제.


1901 : 소수 구하기

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
 
public class Main {
 
    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
     
        int n;
        int i, j;
         
        n = Integer.parseInt(in.readLine());
        int arr[] = new int [n];
        int sosu[][] = new int [n][2];
        int flag = 0;
         
        for (i = 0; i < n; i++) {
            arr[i] = Integer.parseInt(in.readLine());
        }
         
        for (i = 0; i < n; i++) {
            flag =0;
            for (j = 0; j <= 1000001; j++) {
                if (isPrime(arr[i] - j) ) {
                     
                    bw.write(String.format("%d ", arr[i] - j));
                    flag = 1;
                }
                if (j!=0 && isPrime(arr[i] + j) ) {
                     
                    bw.write(String.format("%d ", arr[i] + j));
                    flag = 1;
                }
 
                if (flag == 1) 
                {
                    bw.write("\n");
                    break;
                }
            }
        }
        bw.flush();
        
         
    }
 
    public static boolean isPrime(int num) {
        if(num<2) return false;
        for(int i=2;i<=Math.sqrt(num);i++) {
            if(num%i==0) return false;
        }
        return true;
    }
     
}

숫자를 입력받아 그 숫자랑 가장 차이가 적은 소수를 구하는 문제.


1740 : 소수

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
 
public class Main {
 
    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
     
        int n, m;
        int i, j;
         
        n = Integer.parseInt(in.readLine());
        m = Integer.parseInt(in.readLine());
     
        int sum = 0;
        int min = 0;
        int flag = 0;
         
        for (i = n; i <= m; i++) {
            if (isPrime(i)) {
                if (flag == 0) {
                    min = i;
                    flag = 1;
                }
                sum = sum + i;
            }
        }
         
        if (flag == 0) {
            bw.write("-1");
        }
        else {
            bw.write(String.format("%d\n", sum));
            bw.write(String.format("%d\n", min));
        }
        bw.flush();
    }
     
    public static boolean isPrime(int num) {
        if(num<2) return false;
        for(int i=2;i<=Math.sqrt(num);i++) {
            if(num%i==0) return false;
        }
        return true;
    }
}

두 숫자를 입력받아 그 숫자의 범위 안에있는 소수의 합과 최솟값을 출력하는 문제.


2813 : 소수의 개수

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
 
public class Main {
 
    public static int arr[] = new int [2000001];
     
    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(in.readLine());
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
     
        int n, m;
        int i;
        int cnt = 0;
         
        m = Integer.parseInt(st.nextToken());
        n = Integer.parseInt(st.nextToken());
 
        eratos(n);
         
        for (i = m; i <= n; i++) {
            if (arr[i] == 0) {
                cnt++;
            }
        }
         
        bw.write(String.format("%d", cnt));
        bw.flush();
         
    }
 
    private static void eratos(int num) {
        int i, j;
        arr[0] = 1;
        arr[1] = 1;
         
        for (i = 2; i * i <= num; i++) {
            if (arr[i] == 0) {
                for (j = i * i; j <= num; j += i) {
                    arr[j] = 1;
                }
            }
        }
    }
}

두 숫자를 입력받아 그 숫자의 범위 안에있는 소수의 개수를  출력하는 문제.


2814 : 이진수

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
 
public class Main {
 
    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
     
        String st;
        int i;
         
        st = in.readLine();
         
        bw.write(String.format("%d", change(st)));
        bw.flush();
    }
 
    private static int change(String t) {
        int i;
        int len, ten = 0;
         
        len = t.length();
         
        for (i = 0; i < len; i++) {
            ten = ten * 2 + (t.charAt(i) - '0');
        }
        return ten;
    } 
}

이진수를 입력받아 십진수로 변환하여 출력하는 문제.


1534 : 10진수를 2,8,16진수로

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
 
public class Main {
 
    public static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
     
    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(in.readLine());
         
        int jinsu;
        int n;
         
        n = Integer.parseInt(st.nextToken());
        jinsu = Integer.parseInt(st.nextToken());
         
        change(n,jinsu);
    }
 
    private static void change(int n, int jinsu) throws IOException {
        // TODO Auto-generated method stub
        if (n == 0) return;
        change(n / jinsu, jinsu);
        if (n % jinsu >= 10) {
            bw.write(String.format("%c", (char)(n % jinsu - 10 + 'A')));
            bw.flush();
        }
        else {
            bw.write(String.format("%d", n % jinsu));
            bw.flush();
        }
    }
}

십진수와 어떤진수로 변환할지를 입력받아 이, 팔, 십육진수로 변환하여 출력하는 문제.


3106 : 진법 변환

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
 
public class Main {
 
    public static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
 
    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;
        int i;
         
        int jinsu;
        String n;
        long jinsuConvert;
        long returngap;
                 
        for (i = 0; ; i++) {
            st = new StringTokenizer(in.readLine());
            jinsu = Integer.parseInt(st.nextToken());
 
            if (jinsu == 0) {
                return;
            }
            n = st.nextToken();
 
            jinsuConvert = Integer.parseInt(st.nextToken());
 
            returngap = change(jinsu, n);
            if(returngap==0)bw.write("0");
             
            change_se(returngap, jinsuConvert);
            bw.write("\n");
            bw.flush();
        }
    }
     
    private static long change(long jin, String t) {
        int i;
        int len;
        long ten = 0;
         
        len = t.length();
         
        for (i = 0; i < len; i++) {
            if (Character.isDigit(t.charAt(i))) {
                ten = ten * jin + (t.charAt(i) - '0');              
            }
            else {
                ten = ten * jin + (t.charAt(i) - 'A' + 10); 
            }
        }
        return ten;
    }
     
    private static void change_se(long returngap, long jinsuConvert) throws IOException {
        // TODO Auto-generated method stub
        if (returngap == 0) return;
        change_se(returngap / jinsuConvert, jinsuConvert);
        if (returngap % jinsuConvert >= 10) {
            bw.write(String.format("%c", (char)(returngap % jinsuConvert - 10 + 'A')));
            bw.flush();
        }
        else {
            bw.write(String.format("%d", returngap % jinsuConvert));
            bw.flush();
        }
    }
}

a진법 수 s를 입력받아 b진법 수로 변환하여 출력하는 문제