C ++所有素数函数都不起作用

时间:2017-06-07 19:27:26

标签: c++ input output

所以我真的很喜欢编程,我在乱搞并决定尝试编写一个Prime生成器。这个想法是用户输入计算机应检查素数的最大数量,并输出一个包含所有质数的文本文件,直到那里。 所以我写了这段代码。

#include <iostream>
#include <string>
#include <Windows.h>
#include <fstream>

using namespace std;
int isPrime(int num) {
    for (int a = 1; a <= num/2; a++) 
        if (num % a == 0)
            return 0;
    return 1;
}


int main() {
    ofstream out_data("primes.txt");
    std::string name;
    int quantity;
    int maximum = 1000000;
    std::cout << "What is your name ?\n";
    getline(std::cin, name);
    std::cout << "What is the biggest number you want to get as a prime " << name << "? Please note that the maximum is " << maximum <<" \n";
    std::cin >> quantity;
    if (quantity <= maximum) {
        for (int b = 1; b < quantity; b++) {
            if (isPrime(b) == 1) {
                std::cout << b << "\n";
                out_data << b << "\n";
            }
        }
        std::cout << "The computer has finished calculating primes. Please check your folder for a .txt file.";
        Sleep(60000);
    }
    if (quantity > maximum) {
        std::cout << "Oh, i'm sorry. The computer can not calculate till " << quantity << ".";
        Sleep(15000);
    }
    return 0;
}

文件和控制台只显示数字1.我花了一些时间试图找出代码的错误而无处可去。在我看来,for循环会重复自己和if语句直到b

2 个答案:

答案 0 :(得分:2)

您应该从isPrime而不是2开始1。每个整数等于0 mod 1

答案 1 :(得分:1)

我相信你的问题在于你的isPrime功能。当a = 1时for循环的第一次迭代将始终捕获if语句,因为任何num%1 = 0。 用a = 2开始你的for循环。

   int isPrime(int num) {
        for (int a = 2; a <= num/2; a++) 
            if (num % a == 0)
                return 0;
        return 1;
    }

由于num / 2 = 0,因此,当num = 1时,永远不会输入for循环。因此,你的isPrime()函数将返回1,它将让它输出。所有其他nums将进入for循环并返回0.