2017-10-20 240 views
-3

我想编程在c中的质数检查器,但下面的代码返回一些素数作为非素数。我一直没有找到任何注册为素数的非素数。我不确定自己出错的地方,并开始怀疑我的for循环正在跳过数字。For循环跳过数字在C

#include <stdio.h> 
#include <stdlib.h> 

int main() { 
    int nummer = 47203; 
    printf("Ist %d eine Primzahl?\n", nummer); 
    int dividey =2; 
    if (nummer == 2){ 
     printf("nein"); 

    }  


    for (dividey = 2; dividey <= nummer/2; dividey++){ 
    if (nummer%dividey==0){ 
     printf("nein"); 
     break; 
    }else { 
     printf("ja"); 
     break; 
    } 
    } 
} 
+4

2个问题:当一个数字不分,你的算法停止,跳过其他!并考虑循环直到sqrt(nummer),您将保存周期。在SO和codereview上有许多关于质数检查的重复/问题。检查它们。 –

回答

2

是的,它是跳过数字 - 因为你已经告诉它!

例如,如果您正在检查15,这显然不是主要的。在第一次通过你的循环,dividey设置为2。然后,您做此项检查:

if (nummer%dividey==0) 

15 % 2是1,所以这个条件不满足,你跳转到else部分。

你的其他部分做到这一点:

printf("ja"); 
break; 

即它打印Ja说这是一个素数,并停止循环,即使它不是素数,并且你没有检查所有除数。如果循环继续检查除以3,它会意识到它不是素数。

+0

那么解决方法是? –

+0

最简单的方法是在你的循环之前将一个标志设置为'false',并在'Nein'分支中'break'之前将其设置为true。一旦你退出循环,如果该标志仍然是'假',你已经找到了一个素数。 – Steve