仅使用循环在c中给定范围的质数

时间:2018-11-15 15:30:49

标签: c loops

我怎么能用C语言编写一个程序,在不使用任何条件(仅使用循环!)的情况下,不给出给定范围的所有素数。我尝试了许多不同的选择,但其中一个都不正常。 例如:

我已经尝试过的东西:

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

#define UNTIL 1000
#define NOT_INCLUDED 2
int main()
{
int prime =1, i =1,factor=0;

    for(prime=1;UNTIL>=prime ;prime++)
    {
        for( i=1;i<=prime;i++)
        {
            for(;prime%i==0;)
            {
                factor++;
            }
        }

        for(;factor==2;factor=0)
        {
            printf("prime number: %d \n",prime);
        }
    }

    return 0;
}

2 个答案:

答案 0 :(得分:2)

接受挑战:没有任何条件,隐藏或其他条件

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

int main(void) {
    const char *p = "2 3 5 7 11 13 17 19 23 29\0\0\0\0\0"; /* extend at will */
    for (;;) {
        p += printf("%d ", atoi(p));
        fflush(stdout);
        int z = 42 / *p;
        (void)z; /* unused warning */
    }
    return 0;
}

查看在ideone.com上运行的代码

答案 1 :(得分:0)

要检查N是否为质数,请遍历从2N的所有数字,以查看N是否可被其他数字整除。每个数字都可以被1整除,因此在测试素数时,请针对2进行测试。

示例

#include <stdio.h>

int is_prime(int N)
{
    //0 and 1 are not primes
    if (N < 2)
        return 0;

    //start testing against 2
    for(int i = 2; i < N; i++) 
        if(N % i == 0)
            return 0; //not a prime

    return 1; //prime
}

int main()
{
    printf("Primes from 0 to 1000:\n");

    for(int i = 0; i < 1000; i++)
        if(is_prime(i))
            printf("%d, ", i);

    printf("\n");
    return 0;
}

您可以通过将范围更改为N/2来优化循环。

for(int i = 2; i <= N/2; i++) 
    if(N % i == 0)
        return 0; //not a prime
return 1;//prime