我写了一个求1000-10000素数的程序,代码去图片,但为什么求出的从是9701后的所有数?
#include "stdafx.h"
#include
#include
int calculate(int i)
{
int judge;
for (judge = 2; judge < i; judge++) //穷举i的所有除数
{
if (i%judge == 0)
{
return 0; //不是素数
}
else if (i!=judge+1) //判断i有没有被所有除数除完 如果除完都没有余数就返回1 即这个数十素数! 如果没有除完继续循环除!
continue;
else
return 1;
}
}
int main()
{
int i;
for (i = 1000; i < 10000; i++) //穷举所有i
if (calculate(i) == 1)
printf("%d\n", i); //输出素数!
system("pause");
老实说,这代码问题太多,判断i是否是素数的循环里,Target范围不用从2到达i,到达i平方根即可,其次,i跟1,2的比较没用,
再次,target不用累加,如果i是素数,判断到i的平方根即可确定是素数,如果i不是素数,则必然可以由素数的乘积构成,所以target
的取值只需全部取素数即可
贴源码呀。不然怎么知道你的错在哪
上源代码,看着费劲。
else if(judge+1 != i){
continue;
}没必要写这句吧,而且主要算法没写,肯定实现不了。
1.return 0;后面不用break,直接就有返回值了。2.最后默认return=0;3.else if 去掉else。再试试吧
还有if(i=2)这里有错
不能这样写,好多程序都有这样的BUG
if(i==2)
private static void check(int i){
if(i==2||i==3){
System.out.println(i);
return;
}
if(i%2==0||i%3==0){
return;
}
for(int j=5;j<Math.sqrt(i);j+=6){
if(i%j==0||i%(j+2)==0){
return;
}
}
System.out.println(i);
}
这样写for循环的话,里面的逻辑太绕了吧,根本不需要contiue去终止该次循环。在for函数外面return一下就可以了