永发信息网

c语言用筛法求之N内的素数.

答案:3  悬赏:0  手机版
解决时间 2021-01-20 09:32
  • 提问者网友:半生酒醒
  • 2021-01-19 08:38
c语言用筛法求之N内的素数.
最佳答案
  • 五星知识达人网友:千夜
  • 2021-01-19 10:00
你是不是刚开始学习编程啊,里面的低级错误很多
#include
int main ()
{
int n,i,j,k,t,a ,b,s[100];

printf("please input a number:");//要求外部输入的时候最好能有打印提示
while (scanf ("%d",&n)!=EOF) //输入直接作为while的判断条件其实不太好,不过如果没有恶意输入的话就这样也可以
{
t=0;
if (n==2)
printf ("2\n");
else
{
for (j=2;j {
b = 0; //每次循环开始,b都需要初始化,否则if(b!=1)可能判断的是一个没有初始化的值。
for (i=2;i {
a=j%i;

if (a==0)
{
b=1;
break;
}
}
if (b!=1)
{
s[t]=j;
t++;
}
}
for (k=0;k {
printf ("%d\n",s[k]); //低级错误,打印的是s[k]
}
printf("please input another number:");
}
}
return 0;
}
全部回答
  • 1楼网友:鸽屿
  • 2021-01-19 12:10
100以内的素数(除了2)都不能被2 ,3, 5, 7 整出。可以利用这个规律进行筛选。
  • 2楼网友:思契十里
  • 2021-01-19 10:59

错误相当的多#include
int main ()
{
 int n,i,j,k,t,a,b,s[100];//最多只能存100个素数。有说n的最大值吗? 如果n最大超过546 这里会出错
 while (scanf ("%d",&n)!=EOF)
 {
  t=0;
  if (n==2)
   printf ("2 "); 
  else
  {
   for (j=2;j   {
   b = 0;//每次标志b要初始化一下 不然判断会出错
    for (i=2;i    {
     a=j%i;
     if (a==0)
     {
      b=1;
      break;
     }
    }
   if (b!=1)
   {
    s[t]=j;
    t++;
   }
   }
   for (k=0;k   {
    printf ("%d  ",s[k]);//用%d 打印s[k] 而不是s[t]
   }
  }
  
 }
 return 0;
}


而且怀疑算法用错了。
不知道你们老师告诉的筛法是什么样子的 我的理解应该用素数筛才对
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯