C语言中的Eratosthenes-在这种情况下如何使用printf

时间:2019-11-20 19:13:29

标签: c

我的代码已基本完成,它可以计算2到1000之间的所有素数。但是,我需要编写一个代码来扫描素数数组并打印是否为素数。

对于那些不了解我想要什么的人:计算2至1000之间的所有素数后,我希望用户提供一个随机数,然后告诉用户它是否为素数。使用下面的这段代码,由于某种原因它不起作用...有人可以告诉我我做错了吗?

#include <stdio.h>
#include <stdbool.h>




int main () {


int durch [1000] = {0};

for (int i = 2; i <= 1000; i++)
{
    if (!durch[i-2])
    {
        for (int j = 2*i; j <= 1000; j+= i)
        {
            durch[j-2] = 1;


        }

    }
}

int primzahlen [1000];
int anzahl = 0;
int n;

for (int i = 2; i <= 1000; i++)
{
    if (!durch [i-2])
    {
        primzahlen[anzahl] = i;
        anzahl++;

// printf ("%i : %i\n", anzahl, i);
scanf ("%i\n", &n);

if (n = primzahlen[anzahl]){
    printf ("Yes it is a prime!\n");
    break;
}
else {
    printf ("No it isnt a prime!\n");
    break;
}

    }
}


    return 0;
}

我真的无法弄清楚那部分。.我觉得我想念什么吗?有人可以帮我吗?

2 个答案:

答案 0 :(得分:2)

程序的第二部分不是必需的。您可以将其简化为:

#include <stdio.h>
#include <stdbool.h>

int main () {
    int i;
    int durch [1000] = {0};
    int n;

    for (i = 2; i <= 1000; i++)
    {
        if (!durch[i-2])
        {
            for (int j = 2*i; j <= 1000; j+= i)
            {
                durch[j-2] = 1;
            }
        }
    }

    scanf ("%i", &n);

    if ((n > 1) && !durch [n-2]) {
        printf ("Yes it is a prime!\n");
    }
    else {
        printf ("No it isnt a prime!\n");
    }

    return 0;
}

请注意,scanf ("%i\n", &n);将要求输入两个数字。您需要使用scanf ("%i", &n);

请参阅:scanf() curious behaviour!

答案 1 :(得分:1)

您要在此处丢弃n变量的值:

if (n = primzahlen[anzahl]){

您可能打算比较数字而不是赋值

if (n == primzahlen[anzahl]){
相关问题