Notice
Recent Posts
Recent Comments
Link
DY N DY
실력키우기 소수(JAVA) 본문
1740 : 소수
제한시간: 1ms 메모리제한: 64MB
해결횟수: 963회 시도횟수: 2956회
자연수 M과 N이 주어질 때 M이상 N이하의 자연수 중 소수인 것을 모두 골라 이들 소수의 합과 최소값을 찾는 프로그램을 작성하시오.
예를 들어 M=60, N=100이 경우 60이상 100이하의 자연수 중 소수는 61, 67, 71, 73, 79, 83, 89, 97 총 8개가 있으므로, 이들 소수의 합은 620이고, 최소값은 61이 된다.
[Copy]60 100 | [Copy]620 61 |
- /**************************************************************
- Problem: 1740
- User: a132034
- Language: Java
- Result: Success
- Time:197 ms
- Memory:11324 kb
- ****************************************************************/
- import java.util.Scanner;
- public class Main
- {
- public static void main(String[] args) {
- final int UNDEFINE = 0;
- final int PRIME = 1;
- final int NOT = 2;
- int sum = 0 ;
- int minPrime = 0;
- boolean minFlg = true;
- arr[1] = NOT;
- {
- boolean isPrime = true;
- if(arr[i] == UNDEFINE)
- {
- for(int j = 2; j < i; ++j)
- if(i % j == 0)
- isPrime = false;
- if(isPrime)
- arr[i] = PRIME;
- arr[j] = NOT;
- }
- }
- {
- if(arr[i] == PRIME)
- {
- sum+=i;
- if(minFlg)
- {
- minPrime = i;
- minFlg = false;
- }
- }
- }
- if(sum != 0)
- {
- }
- else
- }
- }
어렵지 않게 풀었던 것 같다.
일단 소수를 구하는 공식은 1과 자기 자신을 제외한 수로 나누어 떨어지면 안되기 때문에 단순하게 2부터 자기 자신의 전 까지 나누어보며 체크했다.
시간을 줄이기 위해 값을 체크한 후, 값의 배수가 되는 값들을 모두 계산없이 소수가 아닌 것으로 판단해 주었다.
방금 체크한 값의 배수라는 것은 체크한 값으로 나누어 떨어진다는 것.
ex) 2가 소수이건 아니건 4, 6, 8, 10.... 2*x 는 모두 2로 나누어 떨어지기 때문에 소수가 아님.
그외에는 크게 어려운 점은 없었다.
'PARK > ALGORITHM' 카테고리의 다른 글
실력키우기 소수와 합성수(JAVA) (0) | 2016.06.03 |
---|---|
실력키우기 소수의개수(JAVA) (0) | 2016.06.02 |
알고리즘 로봇(JAVA) (0) | 2016.05.26 |
실력키우기 최대공약수, 최소공배수(JAVA) (0) | 2016.05.25 |
알고리즘 치즈(JAVA) (1) | 2016.05.24 |