标题:关于求素数的问题,麻烦各位帮忙看下。
只看楼主
掘路者
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2017-11-20
结帖率:0
已结贴  问题点数:2 回复次数:2 
关于求素数的问题,麻烦各位帮忙看下。
给定一个数值,求出小于该整数的所有素数,并放到一个数组里面,且返回总的素数个数之和。
程序代码:
int fun(int lim, int aa[MAX])
{
  int i,j,k=0;
  for(i=2;i<=lim;i++)
  {
  for(j=2;j<i;j++)
  {
  if(i%j==0)break;
  }
  if(j>=i)   //这个地方无法理解,去掉 >号,则结果有很大的差别。
      aa[k++]=i;
  }
  return k;
}

源代码
程序代码:
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
#define MAX 100
int fun(int lim, int aa[MAX])
{
  int i,j,k=0;
  for(i=2;i<=lim;i++)
  {
  for(j=2;j<i;j++)
  {
  if(i%j==0)break;
  }
  if(j>=i)
      aa[k++]=i;
  }
  return k;
}
  
void main()
{
  FILE *wf;
  int limit,i,sum;
  int aa[MAX];
  system("CLS");
  printf("输入一个整数:");
  scanf("%d",&limit);
  sum=fun(limit,aa);        
  for(i=0;i<sum;i++)
     {
      if(i%10==0&&i!=0)    /*每行输出10个数*/
         printf("\n ");
      printf("%5d ",aa[i]);
    }
/******************************/
  wf=fopen("out.dat","w");
  sum=fun(15,aa);        
  for(i=0;i<sum;i++)
     {
      if(i%10==0&&i!=0)    /*每行输出10个数*/
         fprintf(wf,"\n");
      fprintf(wf,"%5d ",aa[i]);
    }
  fclose(wf);
/*****************************/
}


[此贴子已经被作者于2018-3-6 17:03编辑过]

搜索更多相关主题的帖子: 素数 int MAX for sum 
2018-03-06 17:01
李晨经纪人
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:6
帖 子:175
专家分:848
注 册:2018-2-14
得分:1 
估计你是改成了if(j=i)了,应该是if(j==i)
如果你的循环是 k=(int)sqrt(i);for(j=2;j<=k;j++)时才需要用到if(j>k),因为在for(j=2;j<i;j++)中当j==i时肯定已经跳出循环了,不会出现j>i的情况

[此贴子已经被作者于2018-3-7 17:47编辑过]

2018-03-07 17:41
LiGoudan
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:20
专家分:148
注 册:2018-2-28
得分:1 
个人理解:
可以改写为if (j == i), 在本程序中,按照正常情况是不会出现 j > i 的情况,但是写成 if (j >= i),判断条件更为严谨!
2018-03-07 18:42



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-485042-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.731377 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved