首页 > C++判断素数问问题

C++判断素数问问题

include <stdio.h>

include

using namespace std
;int prim(int n)
{
int i,flag=1;
for(i=2;i<=n/2;i++)
{
if(n%i==0)
{
flag=0;
break;
}
}
return flag;
}
int main ()
{
int i,j=0;
for(i=2;i<=100;i++)
{
if(prim(i)==1)
{
cout<<" "<<i;
j++;
if(j%10==0)
{
cout<<"\n";
}
}
}
}
就是想问下整个代码的思路和n\2是什么意思啊
为什么要这样?。。
求解。。谢谢

include<stdio.h>

int prim(int n)
{
int i,k;
for(i=2;i<=n-1;i++)
{
if(n%i==0)
break;
if(i>n)
k=1;
else
k=0;
}
return k;
}
int main()
{
int m,n;
for(n=2;n<=100;n++)
{
if(prim(n))
{
printf("%4d",n);
m=m+1;
}
if(m%10==0)
printf("\n");
}
}
}

另外这段代码为什么不对啊。。


假设 x 的值为 1 到 n / 2 , 所以该表达式 1 <= n / (n / 2 + x) < 2,只有当n为偶数且x = n / 2 时才会出现等于1的情况,其他所有值都不能被整除,因此没有必要对进行 n / 2 的数进行测试,从而提高效率。

另外建议你提交代码时使用编辑器的“代码”标签,上述代码没有格式看起来很吃力。

int prim(int n) {
    int i,k;

    for(i = 2;i <= n - 1; i++)  {
        if(n % i==0)
            break;

        if(i > n)
            k = 1;
        else
            k = 0;
    }

    return k;
}

第二种方式的问题。if(i > n) 在 for 循环中,for 中明确设置了 i < n -1, 那么if(i > n) 永远是false,也就是 k = 0, 而k 的默认值本来就是 0 ,所以不管是你break掉for,还是到了执行if代码块,最终返回的都是 0.

【热门文章】
【热门文章】