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

C++ C++;所有素数函数都不起作用,c++,input,output,C++,Input,Output,所以我真的是一个编程新手,我在胡闹,决定尝试编写一个素数生成器。其思想是用户输入计算机检查素数的最大值,然后输出一个包含所有素数的文本文件。 所以我写了这段代码 #include <iostream> #include <string> #include <Windows.h> #include <fstream> using namespace std; int isPrime(int num) { for (int a = 1; a

所以我真的是一个编程新手,我在胡闹,决定尝试编写一个素数生成器。其思想是用户输入计算机检查素数的最大值,然后输出一个包含所有素数的文本文件。 所以我写了这段代码

#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;
}
#包括
#包括
#包括
#包括
使用名称空间std;
intisprime(intnum){

对于(int a=1;a你应该在
isPrime
中从
2
开始你的循环,而不是
1
。每个整数都等于
0 mod 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;
    }
intisprime(intnum){

对于(int a=2;a有趣的是,您将
最大值设置为100万。假设为32位整数,最大值应为21亿左右,您应该使用
int\u MAX
。还可以尝试将函数
isPrime
声明为
bool
。然后编写
返回false;//而不是返回0
re>设置为true;//而不是返回1
。然后在if语句中编写
if(isPrime(b))注意,你可以写下if语句,而不用改变,因为C++中的每一个除0的整数值都是真的。在每次迭代中运行这个函数看看当前的迭代数是否是一个素数:OMG!我不敢相信我没有看到它。但是为什么输出1而不是所有的数字从0到x??因为您的函数返回0,并且您只在将数字视为素数时才写入输出。在这种形式中,它没有这样做。由于num/2=0,所以当num=1时,永远不会输入for循环。因此,isPrime()函数将返回1,并让它输出。所有其他num将输入for循环并返回0。(编辑原始答案以包含此内容)