Java Prime을 인쇄하는 프로그램 Numbers 1에서 100에

⚡ 스마트 요약

1부터 100까지의 소수를 출력하는 프로그램 Java 주어진 범위 내의 모든 값을 스캔하여 약수가 정확히 두 개인 값만 반환합니다. 이 글에서는 함수의 정의, 검사 방법, 전체 프로그램, 에라토스테네스의 체, 그리고 검증된 출력 결과를 바탕으로 한 성능 비교에 대해 설명합니다.

  • 🔢 정의 규칙: 소수란 1보다 크고 1과 자기 자신으로만 나누어지는 수이며, 따라서 0과 1은 소수에 해당하지 않습니다.
  • 🔁 범위 스캔: 외부 루프는 2부터 상한값까지 순회하며 각 값을 재사용 가능한 검사 메서드에 위임합니다.
  • 부울 메서드: CheckPrime 함수는 첫 번째 약수를 찾으면 false를 반환하고, 루프가 완료될 때까지 일치하는 약수가 없으면 true를 반환합니다.
  • 제수 경계: 값의 절반까지 테스트하는 것이 맞고, 그 이상 테스트하면 중지합니다.ping 제곱근을 취하면 훨씬 더 빠르게 같은 답을 얻을 수 있습니다.
  • 🧮 결과 집합: 1부터 100 사이에는 정확히 25개의 소수가 존재하며, 마지막 수는 97입니다.
  • 체질법: 에라토스테네스의 체는 부울 배열에서 중복되는 값을 표시하며, 실행 시간은 O(n log log n)입니다.
  • 🧪 검증 실습: 구현을 신뢰하기 전에 2가 포함되고 1이 제외되었는지 확인하십시오.

청춘 Numbers 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 에라토스테네스의 체를 사용하기

특정 범위 내의 모든 소수가 필요할 때, 시행 나눗셈은 적절한 방법이 아닙니다. 에라토스테네스의 체는 불리언 배열을 생성하고, 각 소수의 배수를 합성수로 표시한 다음, 표시되지 않은 나머지 소수를 읽어냅니다.

이 방법은 세 단계로 진행됩니다.

  1. 크기가 n+1인 불리언 배열을 생성하고, 2부터는 모든 인덱스가 소수라고 가정합니다.
  2. 2부터 시작하여 현재 소수의 모든 배수를 합성수로 표시합니다.
  3. 표시되지 않은 다음 인덱스로 이동하여 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 배열.

자주 묻는 질문

총 25개입니다. 수열은 2에서 시작하여 97에서 끝나며, 값이 커질수록 밀도는 꾸준히 감소합니다.

내부 루프 조건은 2 <= 1이 되는데, 이는 즉시 거짓이 되므로 나눗셈이 실행되지 않고 메서드는 참을 반환합니다. 이 한 가지 경우만이라도 모든 구현에서 테스트해 볼 가치가 있습니다.

maxCheck 변수를 500으로 변경하세요. 1보다 큰 값으로 시작하려면 외부 루프 카운터의 초기값을 조정하고 검사 메서드는 그대로 두세요.

p의 모든 작은 배수는 이미 더 작은 소인수를 포함하고 있으며 이전 단계에서 표시되었습니다. p의 제곱부터 시작하면 해당 작업을 반복하지 않아도 됩니다.

일반적으로 프롬프트에 넓은 범위나 성능이 언급되지 않는 한 시험 나눗셈 결과가 반환됩니다. 요청에 상한값을 명시하면 대개 체질 결과가 생성됩니다.

소수는 키를 고르게 분산시키고 충돌을 줄이기 때문에 해시 테이블 및 특징 버킷 크기로 선택됩니다. 또한 특징 벡터화에 사용되는 해싱 함수의 초기값으로도 사용됩니다.

이 게시물을 요약하면 다음과 같습니다.