【问题标题】:How to print all the prime numbers from 1 to 1000?如何打印从 1 到 1000 的所有素数?
【发布时间】:2020-12-09 17:30:20
【问题描述】:

我正在尝试编写一个程序来处理从一到一千的所有数字,但它不起作用。这是我目前写的,我找不到问题:

#include <stdio.h>
#include <stdbool.h>
int main(void)
{
    int i = 0, j = 0, mona = 0;
    bool prime = true;
    //for each number between 1-1000
    //i go over the numbers between two(It's ok if the number is divisible by 1,Every number is divisible 
 by 1) and this number (not including the number itself)
    //if the number is divisible by any number, it is not a prime number
    for(i = 2; i <= 1000; i++)
        {
        for (j = 2; j < i; j++) {
            if (i % j == 0) 
                prime = false;
            if (prime)
                {
                printf("prime number: %d\n", i);
                mona++;
                }
            }
        }
    printf("number of prime numbers: %d", mona);
    return 0;
}

这是我得到的输出:

prime number: 3
number of prime numbers: 1

我也看到我没有考虑第二个。

【问题讨论】:

  • 好吧,你永远不会将 prime 设置回 true。一旦它是假的,它就永远不会回头。
  • 谢谢,它仍然不起作用,但这是问题之一。现在它只打印 1-1000 之间的每个数字,并且它还多次打印每个数字。

标签: c primes


【解决方案1】:

这可能是一个解决方案:

int i, int j;
int count=0;
int mona=0;
  for(i = 2; i <= 1000; i++)
    {
    for (j = 2; j < i; j++) {
        if (i % j != 0) 
            count++;
    }
  if (count==i-2){
            printf("prime number: %d\n", i);
            mona++;
            }
 count=0
 }

使用“count”,你计算除法数,其余不为0。如果所有除法都满足前面的条件,则该数是素数。特定数的第二个周期计算的除法数等于 i-2。

【讨论】:

  • 这段代码有几个错误会阻止编译。一旦正确,生成的代码就会非常浪费。一旦发现因素,就没有理由继续测试。
  • 嗨,我还没有编译代码,然后当我看到我的答案时,我看到了错误。无论如何,我想给提出这个问题的男孩一个可以解决问题的想法。从问题中了解到,小伙子很久没有开始编程了,所以没有理由通过优化来复杂化代码。
  • 我最近开始编程,我 14 岁。你的回答帮助了我非常感谢你
【解决方案2】:

你想要

for(i = 2; i <= 1000; i++)
    {
    prime = true;
    for (j = 2; j < i; j++) {

很明显,如果每次在外循环周围都测试标志,则每次都需要在外循环周围进行初始化。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-10
    • 2011-07-09
    • 2017-01-07
    • 1970-01-01
    • 1970-01-01
    • 2013-05-06
    • 2011-12-17
    • 2011-06-01
    相关资源
    最近更新 更多