所以我真的很喜欢编程,我在乱搞并决定尝试编写一个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
答案 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.