| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 24707 人关注过本帖
标题:给出一个大于或等于 3 的正整数,判断它是不是一个素数 用C语言编程
只看楼主 加入收藏
huahua1992
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2014-7-19
结帖率:0
收藏
 问题点数:0 回复次数:11 
给出一个大于或等于 3 的正整数,判断它是不是一个素数 用C语言编程
给出一个大于或等于3的正整数,判断它是不是一个素数   用C语言编程
我编的程序有错误,求大神指点!!!!
#include<stdio.h>
int main()
{
    int n,i=2;
    printf("从键盘输入一个数n:");
    scanf("%d",&n);
    for(i=2;i<=n-1;i++)
    {
        if(n%i==1)
        {
            printf("n是素数");
            break;
        }

    }   
    if(n%i==0)
        {
            printf("n不是素数");
               
        }   
   
 }
搜索更多相关主题的帖子: 正整数 C语言 键盘 
2014-08-07 21:32
huahua1992
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2014-7-19
收藏
得分:0 
#include<stdio.h>
int main()
{
    int n,i=2;
    printf("从键盘输入一个数n:");
    scanf("%d",&n);
    if(n%i==0)
        {
            printf("n不是素数");
            return;   
        }   
    for(i=2;i<=n-1;i++)
    {
        if(n%i==1)
        {
            printf("n是素数");
            break;
        }

    }   
   
   
 }
2014-08-07 21:48
龙牙
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:大汉
等 级:贵宾
威 望:17
帖 子:769
专家分:6207
注 册:2013-3-18
收藏
得分:0 
2楼的程序不是可以运行,没有错误吗???

只要心是晴朗的,人生就没有雨天。
2014-08-08 08:56
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
最有效和直接的方法,就是查素数表,啥技术都不用,而且超高效。

授人以渔,不授人以鱼。
2014-08-08 11:08
zhaoya881010
Rank: 9Rank: 9Rank: 9
来 自:芒砀古郡
等 级:蜘蛛侠
威 望:1
帖 子:339
专家分:1177
注 册:2010-11-21
收藏
得分:0 
回复 4 楼 TonyDeng
斑竹 V5

Go Go Go
2014-08-08 11:21
永夜的极光
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:2721
专家分:1
注 册:2007-10-9
收藏
得分:0 
首先, 你要搞清楚素数的定义:
质数,又称素数,指在大于1的自然数中,除了1和此整数自身外,无法被其他自然数整除的数。
来源: http://zh.素数


所以验证一个数n是不是素数的基本方法, 就是用所有[2,n-1]范围内的数去试除, 如果能整除, 说明这个数不是素数, 如果所有的数都不能整除, 那么这个数就是素数

然后看C语言如何验证a是否可以被b整除, 这个你是知道的, 就是
if (a % b == 0) { ... }


接下来是要用到循环了, 这个看来对你也不是问题
程序代码:
for (i = 2; i < n - 1; ++i)
{
  if (n % i == 0)
  {...}
}


你的程序的主要问题, 在于对判断逻辑的处理
素数的要求是, 所有[2,n-1]范围的数都不能整除, 也就是说, 只要有任何一个数能整除, n就不是素数

对于这种类型的问题, 一般用一个变量来记录判断的结果
程序代码:
int is_prime = 1;  
for (i = 2; i < n - 1; ++i)
{
  if (n % i == 0)
  {
    is_prime = 0;
    break;
  }
}


最主要的思想就是:
你在循环体里面, 只能确定判断出一个数不是素数, 但无法确定一个数肯定是素数
只有当所有不是素数的判断都失败了, 才能确认这个数是素数

现在可以通过判断is_prime这个变量的值, 来确定n是不是素数了

程序代码:
if (is_prime == 0)
{
  printf("%d 不是素数\n", n);
}
else
{
  printf("%d 是素数\n", n);
}


至此, 判断素数的基本方法已经完成, 完整的程序就需要你自己来完成了

但是要注意上面的程序还有很多可以改进的地方, 比如:
1. 判断素数这是一个独立的功能, 可以封装成一个函数, 这样以后修改的时候, 会方便很多
2. 实际上不需要试除[2,n-1], 只要试除[2,sqrt(n)]就可以了

最后, 是关于效率的问题, 这需要具体问题具体分析, 得知道数据规模和可用资源, 才能确定一种最优的办法, 这就不是几十页纸能讲清楚的了, 如果感兴趣的话, 可以求助Google大神

从BFS(Breadth First Study)到DFS(Depth First Study)
2014-08-08 13:02
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
以下是引用永夜的极光在2014-8-8 13:02:35的发言:

首先, 你要搞清楚素数的定义:
 
 
所以验证一个数n是不是素数的基本方法, 就是用所有[2,n-1]范围内的数去试除, 如果能整除, 说明这个数不是素数, 如果所有的数都不能整除, 那么这个数就是素数
 
然后看C语言如何验证a是否可以被b整除, 这个你是知道的, 就是
if (a % b == 0) { ... }
 
接下来是要用到循环了, 这个看来对你也不是问题
 
for (i = 2; i < n - 1; ++i)
{
  if (n % i == 0)
  {...}
}
 
 
你的程序的主要问题, 在于对判断逻辑的处理
素数的要求是, 所有[2,n-1]范围的数都不能整除, 也就是说, 只要有任何一个数能整除, n就不是素数
 
对于这种类型的问题, 一般用一个变量来记录判断的结果
 
int is_prime = 1;   
for (i = 2; i < n - 1; ++i)
{
  if (n % i == 0)
  {
    is_prime = 0;
    break;
  }
}
 
 
最主要的思想就是:
你在循环体里面, 只能确定判断出一个数不是素数, 但无法确定一个数肯定是素数
只有当所有不是素数的判断都失败了, 才能确认这个数是素数
 
现在可以通过判断is_prime这个变量的值, 来确定n是不是素数了
 
 
if (is_prime == 0)
{
  printf("%d 不是素数\n", n);
}
else
{
  printf("%d 是素数\n", n);
}
 
 
至此, 判断素数的基本方法已经完成, 完整的程序就需要你自己来完成了
 
但是要注意上面的程序还有很多可以改进的地方, 比如:
1. 判断素数这是一个独立的功能, 可以封装成一个函数, 这样以后修改的时候, 会方便很多
2. 实际上不需要试除[2,n-1], 只要试除[2,sqrt(n)]就可以了
 
最后, 是关于效率的问题, 这需要具体问题具体分析, 得知道数据规模和可用资源, 才能确定一种最优的办法, 这就不是几十页纸能讲清楚的了, 如果感兴趣的话, 可以求助Google大神

大神您来了
2014-08-08 13:03
永夜的极光
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:2721
专家分:1
注 册:2007-10-9
收藏
得分:0 
以下是引用zklhp在2014-8-8 13:03:50的发言:


大神您来了

我离大神的境界还差远了

好久没上论坛了, 今天偶然路过, 留下一点脚印, 希望能帮助到楼主

从BFS(Breadth First Study)到DFS(Depth First Study)
2014-08-08 13:10
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
以下是引用永夜的极光在2014-8-8 13:10:22的发言:

 
我离大神的境界还差远了
 
好久没上论坛了, 今天偶然路过, 留下一点脚印, 希望能帮助到楼主

欢迎您常回来看看
2014-08-08 13:24
fogmaple
Rank: 4
来 自:江西省赣州市于都县
等 级:业余侠客
威 望:1
帖 子:119
专家分:233
注 册:2014-7-28
收藏
得分:0 
高手也来了
2014-08-08 13:35
快速回复:给出一个大于或等于 3 的正整数,判断它是不是一个素数 用C语言编程
数据加载中...
 
   



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

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