Java Prime을 인쇄하는 프로그램 Numbers 1에서 100에
⚡ 스마트 요약
1부터 100까지의 소수를 출력하는 프로그램 Java 주어진 범위 내의 모든 값을 스캔하여 약수가 정확히 두 개인 값만 반환합니다. 이 글에서는 함수의 정의, 검사 방법, 전체 프로그램, 에라토스테네스의 체, 그리고 검증된 출력 결과를 바탕으로 한 성능 비교에 대해 설명합니다.
소수란 무엇입니까?
A 소수 소수는 1 또는 자기 자신으로만 나누어지는 수입니다. 1보다 큰 자연수 중에서 두 개의 작은 자연수의 곱으로 나눌 수 없는 수를 소수라고 합니다. 예를 들어, 11은 1 또는 자기 자신으로만 나누어집니다. 다른 소수로는 2, 3, 5, 7, 11, 13, 17 등이 있습니다.
참고 : 0과 1은 소수가 아닙니다. 2는 유일한 짝수 소수입니다.
1부터 100 사이에는 정확히 25개의 소수가 있습니다. 아래 표는 소수를 10의 배수로 묶어 놓았으며, 값이 커질수록 소수의 개수가 줄어드는 패턴을 보여줍니다.
| 범위 | 청춘 Numbers | 카운트 |
|---|---|---|
| 1 – 20 | 2, 3, 5, 7, 11, 13, 17, 19 | 8 |
| 21 – 40 | 23, 29, 31, 37 | 4 |
| 41 – 60 | 41, 43, 47, 53, 59 | 5 |
| 61 – 80 | 61, 67, 71, 73, 79 | 5 |
| 81 – 100 | 83, 89, 97 | 3 |
프라임 인쇄 방법 Numbers 1~100개 프로그램 사이 Java
아래는 Java 1부터 100까지의 소수를 출력하는 프로그램:
프로그램 논리:
- 주요 방법은 다음과 같습니다. 소수 프로그램 Java 이 코드는 1부터 100 사이의 소수를 하나씩 확인하는 루프를 포함합니다.
- 주요 메소드는 메소드를 호출합니다.
CheckPrime어떤 수가 소수인지 판별하려면 Java 아니면 않습니다. - 주어진 숫자(예: 17)를 2부터 17까지의 값으로 나누고 나머지를 확인해야 합니다. 나머지가 0이면 그 숫자는 소수가 아닙니다.
- 어떤 수든 자기 자신의 절반보다 큰 수로 나누어떨어지지 않습니다. 따라서 numberToCheck/2만큼만 반복하면 됩니다. 입력값이 17이면 절반은 8.5이고, 반복문은 2부터 8까지의 값을 순회하게 됩니다.
- If
numberToCheck어떤 수가 다른 수로 완전히 나누어떨어지면 false를 반환하고 루프를 종료합니다. - If
numberToCheck소수이면 true를 반환합니다. - 1~100까지의 소수에 대한 주요 방법 JavaisPrime이 소수인지 확인합니다.
TRUE그리고 그 값을 소수에 더합니다.Numbers문자열을 찾았습니다. - 마지막으로 1부터 100까지의 소수를 출력합니다. Java.
검사 기능을 별도의 메서드로 분리하는 것이 프로그램의 재사용성을 높이는 핵심입니다. 동일한 CheckPrime 메서드는 maxCheck 변수만 변경하면 어떤 상한값으로도 호출할 수 있습니다.
public class PrimeNumbers {
public static void main(String[] args) {
int i;
int num = 0;
int maxCheck = 100; // maxCheck limit till which you want to find prime numbers
boolean isPrime = true;
//Empty String
String primeNumbersFound = "";
//Start loop 2 to maxCheck
for (i = 2; i <= maxCheck; i++) {
isPrime = CheckPrime(i);
if (isPrime) {
primeNumbersFound = primeNumbersFound + i + " ";
}
}
System.out.println("Prime numbers from 1 to " + maxCheck + " are:");
// Print prime numbers from 1 to maxCheck
System.out.println(primeNumbersFound);
}
public static boolean CheckPrime(int numberToCheck) {
int remainder;
for (int i = 2; i <= numberToCheck / 2; i++) {
remainder = numberToCheck % i;
//if remainder is 0 then the number is not prime and we break the loop. Else continue the loop
if (remainder == 0) {
return false;
}
}
return true;
}
}
예상 출력 :
1부터 100까지의 소수의 출력값 Java 프로그램 될 것입니다 :
Prime numbers from 1 to 100 are: 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
내부 루프 조건 때문에 값 2가 통과됩니다. i <= 2 / 2 ~에 평가하다 2 <= 1이는 곧바로 거짓이 되므로, 해당 메서드는 나눗셈 없이 바로 참을 반환합니다.
제곱근 경계를 사용한 최적화 버전
수의 절반까지 나누는 것은 맞지만 불필요한 계산을 수행합니다. 제곱근을 기준으로 나누는 수는 항상 쌍으로 나타나므로 √n보다 큰 인수는 이미 검증된 아래 인수와 짝을 이룹니다.
public class PrimeNumbersOptimized { public static void main(String[] args) { int maxCheck = 100; int count = 0; StringBuilder result = new StringBuilder(); for (int i = 2; i <= maxCheck; i++) { if (isPrime(i)) { result.append(i).append(" "); count++; } } System.out.println("Prime numbers from 1 to " + maxCheck + " are:"); System.out.println(result.toString().trim()); System.out.println("Total primes found: " + count); } public static boolean isPrime(int n) { if (n <= 1) return false; if (n == 2) return true; if (n % 2 == 0) return false; // test only odd divisors up to the square root for (int i = 3; i * i <= n; i += 2) { if (n % i == 0) return false; } return true; } }
출력:
Prime numbers from 1 to 100 are: 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 Total primes found: 25
💡 팁: StringBuilder는 루프 내부에서 반복되는 문자열 연결을 대체합니다. 각 += 문자열에 대한 연산은 새로운 객체를 생성하며, 이 객체는 상한값이 수천에 도달하면 측정 가능해집니다.
프린트 프라임 Numbers 에라토스테네스의 체를 사용하기
특정 범위 내의 모든 소수가 필요할 때, 시행 나눗셈은 적절한 방법이 아닙니다. 에라토스테네스의 체는 불리언 배열을 생성하고, 각 소수의 배수를 합성수로 표시한 다음, 표시되지 않은 나머지 소수를 읽어냅니다.
이 방법은 세 단계로 진행됩니다.
- 크기가 n+1인 불리언 배열을 생성하고, 2부터는 모든 인덱스가 소수라고 가정합니다.
- 2부터 시작하여 현재 소수의 모든 배수를 합성수로 표시합니다.
- 표시되지 않은 다음 인덱스로 이동하여 n의 제곱근을 지날 때까지 반복합니다.
import java.util.Arrays; public class SieveOfEratosthenes { public static void main(String[] args) { int n = 100; boolean[] composite = new boolean[n + 1]; for (int p = 2; p * p <= n; p++) { if (!composite[p]) { // start at p*p because smaller multiples are already marked for (int multiple = p * p; multiple <= n; multiple += p) { composite[multiple] = true; } } } StringBuilder result = new StringBuilder(); for (int i = 2; i <= n; i++) { if (!composite[i]) { result.append(i).append(" "); } } System.out.println("Prime numbers from 1 to " + n + " are:"); System.out.println(result.toString().trim()); } }
출력:
Prime numbers from 1 to 100 are: 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
세 가지 접근 방식 비교
세 프로그램 모두 동일한 25개의 값을 출력하므로, 선택은 전적으로 범위의 크기에 달려 있습니다.
| 접근 | 시간 복잡성 | 추가 메모리 | 최고의 범위 |
|---|---|---|---|
| n/2로 시험 분할 | XNUMX(n²) | O (1) | 수천까지 |
| √n으로의 시험 나눗셈 | O(n√n) | O (1) | 수십만까지 |
| 에라토스테네스의 체 | O(n log log n) | O (N) | 수백만 개의 값 |
저희 프로그램을 확인해 보세요. 임의의 입력 숫자에서 소수를 추출합니다. 범위가 아닌 단일 값을 테스트해야 할 때 사용합니다. 루프를 이용한 추가 연습 문제는 다음을 참조하십시오. 피보나치 수열 Java 밸리 Java 회문 프로그램및 Bubble 정렬 알고리즘 Java체질에 사용되는 부울 배열에 대한 자세한 설명은 다음과 같습니다. Java 배열.

