Java 구소수와 최대 공약수의 간단한 코드 예
5349 단어 Java
소수(질수)는 분해될 수 없는 수를 가리키며, 1과 그 자체를 제외하고는 다른 수를 정할 수 없다.이것은 작은 예로 어떻게 10만 이내의 모든 소수를 구하는지 설명한다.
소수의 분포는 규칙적으로 말할 수 없기 때문에 한 수가 소수인지 아닌지를 검사하려면 반드시 그것을 그것보다 작은 모든 수와 나누어야 한다.그러나 간단한 방법은 그것보다 작은 수를 검사할 필요가 없고, 그것보다 작은 소수를 검사하기만 하면 된다는 것이다.만약 그것보다 작은 모든 소수가 그것을 정돈할 수 없다면, 그것은 소수이다.
public class Primes {
public static void main(String[] args) {
//
List<Integer> primes = getPrimes(100000);
//
for (int i = 0; i < primes.size(); i++) {
Integer prime = primes.get(i);
System.out.printf("%8d", prime);
if (i % 10 == 9) {
System.out.println();
}
}
}
/**
* n
*
* @param n
*
* @return n
*/
private static List<Integer> getPrimes(int n) {
List<Integer> result = new ArrayList<Integer>();
result.add(2);
for (int i = 3; i <= n; i += 2) {
if (!divisible(i, result)) {
result.add(i);
}
}
return result;
}
/**
* n
*
* @param n
* @param primes
*
* @return n primes , true。
*/
private static boolean divisible(int n, List<Integer> primes) {
for (Integer prime : primes) {
if (n % prime == 0) {
return true;
}
}
return false;
}
}
Java 예: 아날로그 분수의 클래스 Fraction이것은 아날로그 분수 연산의 예: Fraction 클래스입니다.분수 연산이 끝난 후에는 최대 공약수로 분자 분모를 제거해야 한다.그래서 여기도 전유상제법으로 최대 공약수를 구하는 예가 있다.또한 Fraction 객체를 구성할 때 분모가 0이면 이상이 발생합니다. 이것도 필요한 검사입니다.
public class FractionTest {
public static void main(String[] args) {
Fraction a = new Fraction(7, 32);
Fraction b = new Fraction(13, 32);
System.out.println(a + " + " + b + " = " + a.add(b) + "(" + a.add(b).doubleValue() + ")");
System.out.println(a + " - " + b + " = " + a.minus(b) + "(" + a.minus(b).doubleValue() + ")");
System.out.println(a + " * " + b + " = " + a.multiply(b) + "(" + a.multiply(b).doubleValue() + ")");
System.out.println(a + " / " + b + " = " + a.devide(b) + "(" + a.devide(b).doubleValue() + ")");
}
}
//
class Fraction {
private int numerator; //
private int denominator; //
Fraction(int numerator, int denominator) {
if (denominator == 0) {
throw new IllegalArgumentException(" 0");
}
this.numerator = numerator;
this.denominator = denominator;
shrink();
}
Fraction() {
this(0, 1);
}
public int getNumerator() {
return numerator;
}
public void setNumerator(int numerator) {
this.numerator = numerator;
}
public int getDenominator() {
return denominator;
}
public void setDenominator(int denominator) {
this.denominator = denominator;
}
//
private Fraction shrink() {
int maxCommonDivisor = getMaxCommonDivisor(this.denominator, this.numerator);
this.numerator /= maxCommonDivisor;
this.denominator /= maxCommonDivisor;
return this;
}
//
private int getMaxCommonDivisor(int a, int b) {
int mod = a % b;
if (mod == 0) {
return b;
} else {
return getMaxCommonDivisor(b, mod);
}
}
//
public Fraction add(Fraction that) {
return new Fraction(this.numerator * that.denominator + this.denominator * that.numerator,
this.denominator * that.denominator);
}
//
public Fraction minus(Fraction that) {
return new Fraction(this.numerator * that.denominator - this.denominator * that.numerator,
this.denominator * that.denominator);
}
//
public Fraction multiply(Fraction that) {
return new Fraction(this.numerator * that.numerator,
this.denominator * that.denominator);
}
//
public Fraction devide(Fraction that) {
return new Fraction(this.numerator * that.denominator,
this.denominator * that.numerator);
}
public double doubleValue() {
return (double) numerator / denominator;
}
@Override
public String toString() {
return String.format("{%d/%d}", this.numerator, this.denominator);
}
}
출력 실행:
{7/32} + {13/32} = {5/8}(0.625)
{7/32} - {13/32} = {-3/16}(-0.1875)
{7/32} * {13/32} = {91/1024}(0.0888671875)
{7/32} / {13/32} = {7/13}(0.5384615384615384)
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.