본문 바로가기
Java

소수 판별 & 상속

by 청원뿔세포 2022. 10. 21.

어떤 자연수 n이 주어지면 그 자연수 n보다 작은 소수가 뭐가 있는지 출력해주는 기능을 만들것이다.

 

상속으로 구현하기

 

- 부모클래스 is_prime

package prime_checker;

public class is_prime {
	boolean is_prime_fuc(int n) {
		// double sqrt_n = Math.sqrt(n);
		for(int i=2; i < n; i++) {
			if(n%i == 0)
				return false;
		}
		return true;
	}
}

- 자식클래스 (is_prime클래스를 부모로 상속받는다)

package prime_checker;

public class find_prime extends is_prime{
	// 상속받는 클래스, 매소드를 선언해줘야함
	
	//매소드
	//(보통 매소드는 접근제한을 public, 
	// 소수이면 출력하는 형태이기 때문에 void를 써줬다)
	public void print_prime(int n){
		for(int i = 2; i < n; i++) {
			if(is_prime_fuc(i)) {
				System.out.print(i+" ");
			}
		}
		
	}
}

- 메인 클래스

package prime_checker;

//is prime

public class main {
	
	public static void main(String[] args) {
		int n = 21;
		find_prime p = new find_prime();
		p.print_prime(n);
	}
}

결과 :

 

하나의 메인 클래스에서 구현하기

package prime_only_one;
//import java.util.ArrayList;

public class main {
	public static void main(String[] argsssss) {
		// 실습 2~n사이의 소수를 모두 출력
		int n = 32;
		
		for(int i=2; i<n; i++) {
			if(i == 2) {
				System.out.print(i+" ");
			}
			for(int j=2; j<i; j++) {
				if(i%j == 0) {
					break;
				}
				if(j==i-1) {
					System.out.print(i+" ");
				}
			}
		}
	}
}

결과:

 

에라토스테네스의 체

package eratos_prime;
import java.util.Arrays;

public class Main {
	public static void main(String[] args) {
		int n = 42;
		boolean[] p = new boolean[n+1];
		Arrays.fill(p, true);
		p[0] = p[1] = false;
		for(int i=2; i*i<=n; i++) {
			if(p[i]) {
				for(int j=i*i; j<=n; j+=i) {
					p[j] = false;
				}
			}
		}
		for(int i=0; i<=n; i++) {
			if(p[i]) {
				System.out.print(i+" ");
			}
		}
	}
}

결과:

 

골드바흐의 추측

짝수인 임의의 수는 두 소수들의 합으로 표현가능하다.

package goldbach_prime;

import java.util.Arrays; 

public class Main {

	public static void main(String[] args) {
		int n = 30;
		
		boolean[] p = new boolean[n+1];
		Arrays.fill(p, true);
		p[0] = p[1] = false;
		for(int i=2; i*i<=n; i++) {
			if(p[i]) {
				for(int j=i*i; j<=n; j+=i) {
					p[j] = false;
				}
			}
		}
		for(int i=1; i<=n; i++) {
			if(p[i]) {
				for(int j=i; j<=n; j++) {
					if(p[j]) {
						if(i+j == n) {
							System.out.println(i+" "+j);
						}
					}
				}
			}
			
		}


	}
}

결과 :

 

소인수분해

package prime_factorization;

public class Main {

	public static void main(String[] args) {
		int n = 120;
		System.out.print(n+"=");
		int i = 2;
		String result = "";
		while(true) {
			if(n==1) {
				break;
			}
			if(n%i==0) {
				result += i+"x";
//				System.out.print(i+"x");
				n = n/i;
			}else {
				i++;
			}
			
		}
		String result1 = result.substring(0,result.length()-1);
		System.out.print(result1);
	}

}

결과:

'Java' 카테고리의 다른 글

상속  (0) 2022.10.19
자바 - 오버로딩 vs 오버라이딩  (0) 2022.06.10
자바 - 기타 제어자  (0) 2022.05.25
자바 - 메소드 오버로딩  (0) 2022.05.24
자바 - 기본 생성자  (0) 2022.05.17

댓글