| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1889 人关注过本帖
标题:求素数的程序出错(比较简单)
只看楼主 加入收藏
wwwjw
Rank: 1
等 级:新手上路
帖 子:41
专家分:0
注 册:2007-12-28
结帖率:33.33%
收藏
 问题点数:0 回复次数:14 
求素数的程序出错(比较简单)
我自己编写的一个求素数的程序(输出5到100间的素数!),算法可能不太好,但我觉得没有错误,我的算法是:
从让j从2到i/2-1做除数循环,如果满足两个条件:
1.i%j不等于0,
2.j在满足上面的条件下循环到了i/2-1
照理说,怎样应该可以,可是为什么运行不成功呢?
下面是源程序:
#include <stdio.h>
main()
{
 int i,m,j,flag=0,xx[100];
 for(i=5;i<100;i++)
 {m=i/2;
  for(j=2;j<m;j++)
   if((i%j!=0)&&j==m) {xx[flag]=i;flag++;}
  }
 for(j=0;j<flag;j++)
 {printf("  %d",xx[j]);
 getch();}
}
搜索更多相关主题的帖子: 素数 
2008-04-08 16:05
zmhdxy
Rank: 1
等 级:新手上路
帖 子:452
专家分:0
注 册:2007-9-27
收藏
得分:0 
#include <stdio.h>
main()
{
int i,m,j,flag=0,xx[100];
for(i=5;i<100;i++)
{
    m=i/2;
    for(j=2;j<=m;j++)
    {
    if(i%j==0) break;
    
    if(j==m){
        xx[flag]=i;
        flag++;
    }
    }
}
for(j=0;j<flag;j++)
{
    printf("  %d",xx[j]);
}
}

2008-04-08 16:37
zmhdxy
Rank: 1
等 级:新手上路
帖 子:452
专家分:0
注 册:2007-9-27
收藏
得分:0 
你的程序 跟本就没有值赋给数组
for(j=2;j<m;j++)改成for(j=2;j<=m;j++)
此时如15也是符合你的条件的 没有达到筛选的目的,也就是说
你的条件是j达到最大的同时,i%j还要!=0 很多数都是符合的

2008-04-08 16:43
meteor57
Rank: 1
来 自:银河系
等 级:新手上路
帖 子:267
专家分:0
注 册:2007-9-29
收藏
得分:0 
指出你的几个问题
#include <stdio.h>
main()
{
int i,m,j,flag=0,xx[100];
for(i=5;i<100;i++)
{m=i/2;                                //m == 2,进入不了下面的for
  for(j=2;j<m;j++)
   if((i%j!=0)&&j==m) {xx[flag]=i;flag++;}
  }
for(j=0;j<flag;j++)                    //flag == 0,进入不了这个for
{printf("  %d",xx[j]);
getch();}
}

所以,最后什么都没有.
算法还要再改改.

这是我的,你参考你一下.
#include<stdio.h>
#include<math.h>
#define MAX 100
#define MIN 5
int main(void)
{
    int count = 1,temp = MIN;
    while (temp <= MAX)
    {
          int j =2;
          while (j <= sqrt(temp) )
          {
                if (temp%j == 0)
                    break;
                if (j < 3)j ++;
                else j += 2;   //因子是不用考虑3以上的偶数的.  
          }
          if(j > sqrt(temp))
          {
                printf("%d\t",temp);
                count ++;
          }
          if(count%10 == 0)
          {
                putchar('\n');
                count = 1;
          }
          temp += 2;//5以上的偶数,不可能是质数的.所以不用考虑.
    }
    getch();
    return 0;
}
2008-04-08 17:19
meteor57
Rank: 1
来 自:银河系
等 级:新手上路
帖 子:267
专家分:0
注 册:2007-9-29
收藏
得分:0 
既然你还没有完全理解,我就解释一下:
#include<stdio.h>
#include<math.h>
#define MAX 100
#define MIN 5
int main(void)
{
    int count = 1,temp = MIN;
    while (temp <= MAX)//从5开始找质数
    {
          int j =2;
//因子从2开始,每环一次,都要重置一次.不然下次的值就不对了.
          while (j <= sqrt(temp) )
/*如果temp(100以内的某数),如果它没有因子(j)小于它的开方sqrt(temp)
它就是质数.这是经过证明的理论.*/
          {
                if (temp%j == 0)
//如果temp整除j说明是因子,也就是temp不是质数,跳出
                    break;
                if (j < 3)j ++;
                else j += 2;   
/*因子是不用考虑3以上的偶数的.
比如某个数.如果它能整除3以上的偶数,那也一定能整除2,所以这里只考虑奇数*/  
          }
          if(j > sqrt(temp))
//如果j > sqrt(temp),说明,没有跳出,而是执行完了整个循环.可断定temp,是质数
          {
                printf("%d\t",temp);
                count ++;
          }
          if(count%10 == 0)//这个是用于控制格式的,第10个数换一行
          {
                putchar('\n');
                count = 1;
          }
          temp += 2;//5以上的偶数,不可能是质数的.所以不用考虑.
    }
    getch();
    return 0;
}

[[it] 本帖最后由 meteor57 于 2008-4-8 21:11 编辑 [/it]]
2008-04-08 21:05
心若止水
Rank: 1
等 级:新手上路
帖 子:89
专家分:0
注 册:2008-4-9
收藏
得分:0 
有那么复杂吗?几行就可以搞定啦!!!
#include "stdio.h"
int main(void)
{
    int n,i,k;
    for(n=5;n<=100;n++)
    {
        for(i=2;i<n;i++)
            if(i>=n)printf("\t%2d",n);
    } return 0;
}
太简单了,编程力求简单明了。
2008-04-10 09:48
心若止水
Rank: 1
等 级:新手上路
帖 子:89
专家分:0
注 册:2008-4-9
收藏
得分:0 
有那么复杂吗?几行就可以搞定了!!!
#include<stdio.h>                           
#include<math.h>
int main(void)
{
    int n,i,k;
        for(n=5;n<=100;n++)
       {
            for(i=2;i<n;i++)
         if(n%i==0)break;
         if(i>=n) printf("\t%2d",n);
        }
            return 0;
}
太简单了,编程力求简单明了,没必要用宏定义吧???这么小的一个程序。
2008-04-10 09:54
心若止水
Rank: 1
等 级:新手上路
帖 子:89
专家分:0
注 册:2008-4-9
收藏
得分:0 
有那么复杂吗?几行就可以搞定了!!!
#include<stdio.h>                           
#include<math.h>
int main(void)
{
    int n,i,k;
        for(n=5;n<=100;n++)
       {
            for(i=2;i<n;i++)
         if(n%i==0)break;
         if(i>=n) printf("\t%2d",n);
        }
            return 0;
}
太简单了,编程力求简单明了,没必要用宏定义吧???这么小的一个程序。
2008-04-10 09:58
心若止水
Rank: 1
等 级:新手上路
帖 子:89
专家分:0
注 册:2008-4-9
收藏
得分:0 
有那么复杂吗?几行就可以搞定了!!!
#include<stdio.h>                           
#include<math.h>
int main(void)
{
    int n,i,k;
        for(n=5;n<=100;n++)
       {
            for(i=2;i<n;i++)
         if(n%i==0)break;
         if(i>=n) printf("\t%2d",n);
        }
            return 0;
}
太简单了,编程力求简单明了,没必要用宏定义吧???这么小的一个程序。
2008-04-10 09:59
xiaosan669
Rank: 1
来 自:西北工业大学
等 级:新手上路
帖 子:78
专家分:0
注 册:2007-3-9
收藏
得分:0 
貌似不需要那么激动吧?

========== 我的世界,我说了算! ==========
2008-04-10 12:51
快速回复:求素数的程序出错(比较简单)
数据加载中...
 
   



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

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