#include <iostream>
using namespace std;
int checkIfPrime(int num) {
for (int i = 1; i < num; i++) {
int result = num / i;
if (num == result * i) {
return 0;
}
}
}
int main() {
int i = 3;
while(1) {
int c = checkIfPrime(i);
if (c != 0) {
cout << c << "\n";
}
i = i + 2;
}
}
Run Code Online (Sandbox Code Playgroud)
抱歉发布了错误的代码!
当我运行这个时,没有任何反应..有人能告诉我我做错了什么吗?
在问题完全改变了它的含义之后:
你CheckIfPrime错了.你以一种非常奇怪的方式检查可分性.检查是否可a被整除的一般方法b是if(a % b == 0)
也就是说,你的错误是你的循环以1开始.当然,每个数字都可以被1整除,因此根据你的逻辑,没有数字是素数.从开始for(int i = 2; ....(根据您是否要将1视为素数,您可能希望num == 1最初专门测试.)
而且,结束条件非常低效.在num的平方根之前检查就足够了,也就是说i <= sqrt(num),因为sqrt是一个相当慢而且不精确的操作,所以更好的方法是循环:
for(int i = 2; i * i < = num; ++i)
Run Code Online (Sandbox Code Playgroud)
另一个注意事项 - 要生成从1到某个MAX_VAL的所有素数,您的方法效率非常低.使用Erastothenes的Sieve.
一些风格的注意事项:你的函数理想情况下应该返回bool而int不是忘记返回,true或者1在循环完成后不返回.
原答案:
首先,你需要
fprintf(OUTPUT_FILE, "%d", Num); //d instead of s, no & before Num
Run Code Online (Sandbox Code Playgroud)
代替
fprintf(OUTPUT_FILE, "%s", &Num);
Run Code Online (Sandbox Code Playgroud)
其次,您使用文件I/O非常低效.为什么要为每个号码打开和关闭文件?您应该打开一次,写下所有数字,然后关闭它.
第三,你的算法似乎与素数没有任何关系...... :)
顺便说一下,由于第一个问题导致了Undefined Behavior,你不能抱怨程序的任何行为,因为它是......好吧,未定义.