오해를 피하기 위해 저는 여기에서 새로 왔으며 아직 자바 초보자입니다. 10,001 번째 소수를 인쇄하는 코드를 작성하려고합니다. 코드는 현재 숫자가 2에서 9까지의 숫자로 나눌 수 있는지 확인한 다음 숫자의 제곱근이 정수인지 아닌지 확인합니다.10001 번째 소수 번호 찾기 - 올바른 번호를 반환하지 않는 코드
public static void main(String[] args){
Integer Num , Counter;
Double Sqrt; //square root
Num=8;
Counter=4 ;
while(Counter<10001){
Num++;
if ((Num%2!=0) && (Num%3!=0) && (Num%4!=0) && (Num%5!=0) && (Num%6!=0) && (Num%7!=0) && (Num%8!=0) && (Num%9!=0)){
Sqrt = Math.sqrt(Num);
if(Sqrt%1!=0){
Counter++;
}
}
}
System.out.println(Num);
}
}
편집 : 더 이상 잘못된 정의를 사용하지만,이 새로운 코드가 더 출력이없고 내가 루프에 문제가 표시되지 않도록
나는 그것을 변경하지 않습니다. 아래의 다른 제안도 시도하지만이를 수정하는 방법을 알고 싶습니다.
public static void main(String[] args)
{
int Num , Counter;
double Sqrt; //square root
Num=1;
Counter=0 ;
while(Counter<10001){
Num++;
Sqrt = Math.sqrt(Num);
int i = (int)Sqrt;
while(i>1){
if(Num%i==0){ //if the number is divisible then the loop is terminated and next number is tested
i=0;
}
i--;
}
if(i==1){
Counter++;
}
}
System.out.println(Num);
}
}
감사합니다.
알고리즘이 올바르지 않습니다. 숫자 11x13 = 143을 고려해보십시오. 분명히 소수가 아니고, 정사각형이 아니며, 2,3로 나눌 수 없습니다. –
@Michael 그것을 지적 해 주셔서 감사합니다. 지금 다른 알고리즘을 사용하고 있습니다. 당신이 그것을 볼 수 있다면, 좋을 것입니다. – Abdul97