2016-09-19 60 views
-4

我有一个质数的程序,但我需要优化它。任何提示?优化与编码

int num, i, count = 0; 

    printf("Type a non-negative integer:\n"); 

scanf("%d", &num); 

    if((num%2 == 0)&& (num != 2)||(num == 1)){ 

    printf("%d is not a prime number.\n", num); 

    } else if(num == 2){ 

    printf("%d is a prime number.\n", num); 

    } else { 

    for(i = 3; i < num; i += 2){ 

     if(num%i == 0){ 

    count++; 

    break; 

     } 

    } 

    if(count == 0){ 

     printf("%d is a prime number.\n", num); 

    } else { 

     printf("%d is not a prime number.\n", num); 

    } 

    } 

} 
+4

最好在[codereview.se]上提问。堆栈溢出专注于不工作的代码。 (除了在此处注册时,我强烈建议阅读他们的[游览](http://codereview.stackexchange.com/tour)。) – usr2564301

+0

它是否再次“重新搜索”?哇,时间过得很快...... – Olaf

+0

这不是一个*程序*。发布一个完整的示例,并学习使用空格缩进代码。 – chqrlie

回答

0

我认为这是您可能自己解决的基本问题之一! 我可以帮你解决这个问题;首先看看素数定义:

素数是一个数字,只能被1和它自己可分。 假设我们将其命名为然后只能被1整除,且数字1不是总数。

这样的想法是:

1 - 如果数字是1不是素数!

2 - 如果数目是2是素数

3 - 否则---->我们初始化I = 2,然后开始计算的ñ%I值;如果是0的数量不是素数,否则就要由1

增量I我们这样做第3步,直到我< ñ(或我< =开方(ñ))

如果号码不能被任何i整除,那么它就是黄金!

下面是一个简单的实现:

int n ; 
printf("enter n:"); 
scanf("%d",&n); 
if(n<=1) printf("is not prime"); 
else if(n==2) printf("is prime"); 
else{ 
    bool flag = true; 
    for(int i = 2 ; i < n ; i++) 
     if(n%i==0){ 
     flag = false; 
     break; 
     } 
    if(flag) printf("is prime"); 
    else printf("is not prime"); 
} 

有一个更好的算法来发现一系列素数;我认为这是更好地了解它:

Sieve of Eratosthenes

我希望本教程可以帮助你找出什么是素数。

+0

问题标记为[tag:c]而不是[tag:C++]。您可以毫不费力地将您的答案重写为直接的C代码 - 而且您应该。为C问题提供C++答案不是一个好主意。 –

+0

@JonathanLeffler哎呀!昨天晚上我累了,我看到它的c + + :))) 我会写在c,感谢您的编辑和建议(Y) –