帮一个学妹改代码,计算65535内的所有素数。他的逻辑是发现某个数有因子后,就让他的值等于-1,然后判断,如果不等于-1就输出这个数。结果还是能输出-1,我拿到这个程序后,注释掉了最后面的cout,发现依然有输出(成千上万个-1和某些素数)。后来我把他的void main()改成了int main()就能正常运行但是会异常退出。后来我用clion编译这个代码,就能正常输出。这是为什么,int main和void main为什么会有这么大的差异,void的时候为什么注释掉了cout在vs2015里还会有输出。
#include<iostream>
using namespace std;
void main()
{
int i = 1;
int a[65534] = { 1 };
while (i <= 65534)
{
a[i] = a[i - 1] + 1;
i++;
}
for (int j = 0; j <= 255; j++)
{
if (a[j] % 2 == 0 || a[j] % 3 == 0 || a[j] % 5 == 0 || a[j] % 7 == 0 || a[j] % 11 == 0 || a[j] % 13 == 0)
{
a[j] = -1;
}
}
a[0] = -1;
a[1] = 2, a[2] = 3, a[4] = 5, a[6] = 7, a[10] = 11, a[12] = 13;
for (int m = 0; m <= 255; m++)
{
if (a[m] == -1)
continue;
else
for (int n = 65534; n >= 0; n--)
{
if (a[n] == a[m])
{
break;
}
else if (a[n] % a[m] == 0)
{
a[n] = -1;
}
}
}
cout << "65535以内素数:" << endl;
//for (int p = 0; p <= 65534; p++)
//{
//if (a[p] == -1)
// continue;
//else
//}
}
下面的if (a[p] = -1),会执行这个赋值语句的,代码思路确实很奇怪,思路有点混乱
中间的a[1] = 2, a[2] = 3, a[4] = 5, a[6] = 7, a[10] = 11, a[12] = 13;这段不觉得很难受么...
int main\void main这是一个有定论的事情了,void就是错误的,LLVM甚至会把这个报错,不用再用void main的写法了
思路有点乱,建议重写
补充一下,continue语句应尽量少用或不用,容易造成不易理解的代码