| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 710 人关注过本帖, 1 人收藏
标题:求素数的n种方法,有的不懂,请大虾赐教。
只看楼主 加入收藏
远方的海
Rank: 1
等 级:新手上路
帖 子:18
专家分:6
注 册:2011-11-11
结帖率:83.33%
收藏(1)
已结贴  问题点数:2 回复次数:8 
求素数的n种方法,有的不懂,请大虾赐教。
#include <stdio.h>
#include <math.h>
void main()
{
   int i,j;
   for(i=2;i<=100;i++)
   {
       for(j=2;j<sqrt(i);j++)
           if(i%j==0)
               break;
           if(i%j!=0)
               printf("%d\t",i );
   
   }
}
------------------------------------------------------------------------------------------------------
#include <stdio.h>
#include <math.h>
void main()
{
   int i,j;
   for(i=2;i<=100;i++)
   {
       for(j=2;j<sqrt(i);j++)
           if(i%j==0)
               break;
           if(j>sqrt(i))
               printf("%d\t",i );
   
   }
}

------------------------------------------------------------------------------------------------------
#include <stdio.h>
void main()
{
   int i,j;
   for(i=2;i<=100;i++)
   {
       for(j=2;j<i;j++)
           if(i%j==0)
               break;
           if(i==j)
               printf("%d\t",i );
   
   }
}
-------------------------------------------------------------------------------------------------------
第二种方法不太懂,为什么是要if(j>sqrt(i))时,输出结果。上面for里面不是有j<sqrt(i)吗?下面怎么可能有j>sqrt(i)。实在搞不懂,求高首4详解啊!!还有,为什么第二个for语句不用{}括起来?

搜索更多相关主题的帖子: include 
2011-12-28 19:41
燃高
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:67
专家分:140
注 册:2011-12-13
收藏
得分:0 
因为退出循环的有两个因素  1是j>sqrt(i) 另外一个是(i%j==0) 而(i%j==0) 不是素数!!第二for是检验是否可以被整除!!
2011-12-28 19:48
kennel2009
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:45
专家分:157
注 册:2011-12-13
收藏
得分:1 
呵呵 我来回答..
#include <stdio.h>
#include <math.h>
void main()
{
   int i,j;
   for(i=2;i<=100;i++)
   {
       for(j=2;j<sqrt(i);j++)
           if(i%j==0)
               break;
       if(j>sqrt(i))            //注意此处,if跟上面的for是应该对齐的,而不是跟上面的if,其余两个程序雷同
           printf("%d\t",i );
   }
}
当for下只有一条语句时,可以不用{},良好的风格是for if while 下无论几行代码都要紧跟{}。
所以,个人推崇的风格如下:
#include <stdio.h>
#include <math.h>
int main()
{
   int i, j;
   for(i = 2;i <= 100; i++)
   {
       for (j = 2; j < sqrt(i); j++)
       {
            if(i % j == 0)
               break;
       }
       if (j > sqrt(i))
       {
            printf("%d\t", i );
       }
   }
   return 0;
}
啊..忘记说了..如果满意,别忘记分哦..
2011-12-28 22:44
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:0 
还是去看看筛选法吧

                                         
===========深入<----------------->浅出============
2011-12-28 22:49
木头_回不去
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2011-12-28
收藏
得分:0 
#include<stdio.h>
int ss(int);
void main()
{
  int xz[101],i;
  for(i=1;i<=100;i++)
  {
    if(ss(i))
    {
      xz[i]=1;
    }
  }
  for(i=1;i<=100;i++)
  {
    if(xz[i])
    {
      printf("%d ",i);
    }  
  }
}
int ss(int x)
{
  int i;
  for(i=2;i<x;i++)
  {
    if(x%i==0)return 0;
  }
  if(x==i)return 1;
}
筛选求素数,自己水平不高,望高手指点

[ 本帖最后由 木头_回不去 于 2011-12-28 23:04 编辑 ]
2011-12-28 23:03
中国神猴
Rank: 2
等 级:论坛游民
帖 子:16
专家分:11
注 册:2011-12-13
收藏
得分:0 
有点晕
2011-12-28 23:53
远方的海
Rank: 1
等 级:新手上路
帖 子:18
专家分:6
注 册:2011-11-11
收藏
得分:0 
回复 3楼 kennel2009
啊,真是一语惊醒梦中人,我懂了!!谢了啊!
2011-12-29 15:58
ggyy4k
Rank: 5Rank: 5
等 级:职业侠客
帖 子:111
专家分:334
注 册:2010-6-28
收藏
得分:0 
楼主也忒小气了,才拿出来2分···
2011-12-29 16:03
stophin
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:3
帖 子:227
专家分:618
注 册:2010-3-26
收藏
得分:1 
上面那个j<sqrt(i)的循环有两种退出状态,一个是满足条件i%j==0的break退出,另一个是当j>=sqrt(i)时的循环正常退出
if(j>sqrt(i))就是判断是break退出的还是正常循环完毕退出的
但由于sqrt()返回的是一个浮点数,所以不是if(j>=sqrt(i))而是if(j>sqrt(i))
楼主,其实更正确的写法是:
       for(j=2;j<=(int)sqrt(i);j++)//转换成int
           if(i%j==0)
               break;
       if(j>(int)sqrt(i))//转换成int
               printf("%d\t",i );
2011-12-29 17:52
快速回复:求素数的n种方法,有的不懂,请大虾赐教。
数据加载中...
 
   



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

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