2012-04-06 3 views
0

안녕하세요! 소수를 생성하려고하는데 내 조건 i%i이 오류를 생성하고 있습니다.(i % 2 == 0) && (i % i == 0))이 기술은 소수 생성을 위해 작동하지 않습니다 #

"0으로 나누기"오류가 발생합니다.

어떻게 해결할 수 있습니까 ?? 곧 당신에게서 듣고 희망

int a, n, i; 

Console.WriteLine("Enter ur number"); 

n = Convert.ToInt32(Console.ReadLine()); 

for (i = 0; i <= n; i++) 
{ 
    if ((i % 2 == 0) && (i % i == 0)) 
    { 
     a = i; 
     Console.WriteLine("The prime numbers are", a); 
    } 
} 

Console.ReadLine(); 

...

+7

'i % i'는 항상 (i> 0에 대해) 0이므로, 후자의 조건은 동어 반복이다. –

+2

어쨌든 환자 ** [UR 번호] ​​(http://www.rch.org.au/rchhis/requests/index.cfm?doc_id=1863) **가 우연히 소수 일 수있는 기회는 무엇입니까? – sehe

+1

프라임 번호를 찾으려면 시브 오브 에라토스테네스를 사용할 수 있습니다. –

답변

2

변경

for (i = 0; i <= n; i++) 

for (i = 1; i <= n; i++) 
+0

옙 나는 결과를 얻고 있지만이 "소수는"인쇄 번호가 아닌가 ?? –

+1

@SyedRaza 매개 변수를 포함하려면 인쇄 줄을 변경해야합니다. "Console.WriteLine ("소수는 {0} ", a)입니다." – luketorjussen

13

i이 0이 0 % 0을하고있는 루프 주위에 처음이다 이는 제로 에러에 의한 결과를 초래한다.

귀하의 기능이 무엇을하려고하는지에 대해서는 잘 모르겠습니다. 나는 여기에 소수와 관련된 많은 것을 보지 못했다. n 미만의 모든 짝수를 찾는 것입니다.

는의가 if 테스트를 살펴 보자 :

if ((i % 2 == 0) && (i % i == 0)) 

두 번째 부분, i % i == 0 항상 너무 오래 i0가 아니므로 true가됩니다. 그래서 그 부분은 가짜입니다. i % 2 == 0i이 짝수인지 여부를 간단히 테스트합니다.

실제로 의도하는 코드는 무엇입니까? 숫자가 소수인지 아닌지 테스트하려고합니까? 그렇다면, 가장 간단한 방법은 다음과 같이이다 :

static bool isPrime(int n) 
{ 
    Debug.Assert(n>0); 
    for (int i=2; i<n; i++) 
     if (n % i == 0) // n is exactly divisible by i, so n is not prime 
      return false; 
    return true; // we could not find a factor, so n must be prime 
} 

당신이 현재 코드 출력하지 번호 Console.WriteLine에 전화가 아주 정확하지 않기 때문에 할 수 있습니다. 당신은 다음을 의미합니다 :

다른 점은 사용자 코드 버전이 소수 테스트를 I/O 코드와 섞 었다는 것입니다. 하나의 커다란 루틴으로 모든 것을 함께 사용하면 코드를 이해하고 디버깅하는 것이 더 어려워집니다. 여기에 설명 된 것처럼 소수 테스트를 별도의 함수로 분할하면 정확성을 더 쉽게 확인할 수 있습니다. 그것이 맞다는 것을 알게되면 IO 코드에서 사용할 수 있습니다. 그런 다음 IO 코드를 올바르게 수정하는 데 집중할 수 있습니다.

Console.Write("Enter your number: "); 
int n = Convert.ToInt32(Console.ReadLine()); 
Console.WriteLine("The prime numbers are:"); 
for (int i = 1; i <= n; i++) 
    if (isPrime(i)) 
     Console.WriteLine(i); 
Console.ReadLine(); 
+1

그건 모두가 누락 한 가장 큰 문제입니다. 소수는 단지 2로 나눌 가치가 없습니다 ... – MPelletier

+0

@MPelletier 사실, 9입니다. 더 많은 성능을 위해서는 2 –

+2

으로 나눌 수 없습니다. 'i Snicksie

1

음, 0 일 때, 당신은 실제로 0으로 분할하기위한 시도 인 0%0을 계산하기 위해 노력하고이 같이 보일 수있다.

어쨌든 i가 0 일 때를 제외하고는 i % i는 이고 항상입니다. 소수로 계산하는 방법은 거의 없습니다. 당신이 0에서 루프를 시작하기 때문에

0

그것은 분명, 당신은 1

1

%에서 루프를 시작해야하면 나머지 연산자입니다. 두 숫자 사이의 나머지 부분을 제공합니다.

(i % 2) == 0 

i이 짝수 여야하는지 테스트합니다.

(i % i) == 0 

항상 i/i = 1 remainder 0 때문에, i > 0에 대한 true 반환합니다. i0 일 때 0/0을 평가하려고하므로 0으로 나누기 예외가 발생합니다.

(참조 : http://msdn.microsoft.com/en-us/library/0w4e0fzs.aspx)

i가 소수 여부를 확인하려면, 당신은 i2에서 floor(i/2) 모든 정수로 나누어 하지 있는지 확인하려면 것입니다. prime numbers을 어떤이 옵션을 선택합니다 :

0

아이 프로그램은 더 프라임 확인하면 C에서 프라임

#include<stdio.h> 

main() 
{ 
    int n, c = 2; 

    printf("Enter a number to check if it is prime\n"); 
    scanf("%d",&n); 

    for (c = 2 ; c <= n - 1 ; c++) 
    { 
     if (n%c == 0) 
     { 
     printf("%d is not prime.\n", n); 
    break; 
     } 
    } 
    if (c == n) 
     printf("%d is prime.\n", n); 

    return 0; 
} 

입니다 찾을 수 있습니다.

Prime number are those which will not divided by any number except 1 and itself. 

는 문하여 확인 번호는 2에서 N-1로 시작해야합니다. 다른 카운터 루프 내 주요 검사 루프를 넣어 가지고 그렇게 등 100-

bool isPrime = true; 
      int number = Convert.ToInt32(Console.Read()); 
      int i = 2; 
      while (i < number) 
      { 
       if (number % i == 0) 
       { 
        isPrime = false; 
        break; 
       } 
       i++; 
      } 

      if (isPrime) 
      { 
       //Prime number 
      } 
      else 
      { 
       //Not Prime No 
      } 

확인 this 어떤 범위 사이의 1을 소수를 생성하는 방법을 알고 있습니다.