标题:素数的判定
只看楼主
a1350717760
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2017-4-9
结帖率:100%
已结贴  问题点数:20 回复次数:6 
素数的判定
输入一个数,判断是不是素数。
#include<stdio.h>
#include<math.h>
main()
{
int a,b,c;
scanf("%d",&a);
  {
    for(b=2;b<=sqrt(a);b++)
    c=a%b;
   }
if(c==0) printf("此数为合数");
if(c!=0) printf("此数为素数");
}
有很多明显是合数的,它也判定为素数,请各位大师帮忙看下,该怎么修改?
搜索更多相关主题的帖子: include 
2017-04-24 16:07
sunb3
Rank: 2
来 自:北京
等 级:论坛游民
威 望:3
帖 子:34
专家分:94
注 册:2017-4-20
得分:5 
回复 楼主 a1350717760
这段代码是以前发百度百科的:

参考地址:
http://baike.baidu.com/link?url=32VTB-kknELMAePIZ4O2NQbCRnJfGUce0VGimkTtAqk-zffpk1WlIl2KrFEn3z_Ou9c38izI_9K5YVWRAEJ16xUYDT4kVS0_d-d498WfiWQD4JDgZZ6jO_Be8E0JL3YAv4JEaaNVkYMNZ7KahCsmVku6znI5CHOYPIyDi9Rkiou#2_7



代码和注释都给你打出来了,代码不好看不用管,注意思路就可以了……
程序代码:
#define true 1
#define false 0
typedef int BOOL;

BOOL isPrime(unsigned long n) {
    if (n <= 3) {  /*首先,1、2、3肯定都是素数,只要不小于1就可以了*/
        return n > 1;
    } else if (n % 2 == 0 || n % 3 == 0) {  /*在1、2、3之后能被2和3整除的情况下肯定不是素数了*/
        return false;
    } else {
        for (unsigned short i = 5; i * i <= n; i += 6) {  /*4在上面的elseif中被处理了,5是素数,所以是最小因子了,每次+6都是一个比较“素”的数,不信你加加看……*/
            if (n % i == 0 || n % (i + 2) == 0) { /*一个数如果不能被2、3整除,还不能被其它素数整除,那它应该就是一个素数了。*/
                return false;
            }
        }
        return true;
    }
}

除了基础……我什么都不会……
2017-04-24 16:34
grmmylbs
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:54
帖 子:1409
专家分:5845
注 册:2016-2-14
得分:5 
程序代码:
#include<stdio.h>
#include<math.h>
main()
{
    int a, b, c;
    scanf("%d", &a);
    {
        for (b = 2; b <= sqrt(a); b++)
        {
            c = a%b;
            if (c == 0) { printf("此数为合数"); break; }//如果放在外面,c取的是循环最后一个a%b的余数,就会 出现漏判
        }
    }
    
    if (c != 0) printf("此数为素数");
}
2017-04-24 16:37
a1350717760
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2017-4-9
得分:0 
回复 2楼 sunb3
还没学到那后面去,虽然看不懂,但还是必须要谢谢
2017-04-24 16:57
vvvcuu
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:12
帖 子:353
专家分:1253
注 册:2014-4-22
得分:5 
以下代码参考本帖:
http://bbs.bccn.net/thread-430387-1-1.html


程序代码:
#include "stdio.h"
int main(){
    int a,b,c;
    printf("请输入一个数字:\n"); 
    while(scanf("%d",&a)){ 
        for(b=2;a%b;b++);         //注意此处末尾有个分号
        if(a==b) printf("%d是素数。\n",a); 
        else printf("%d不是素数!\n",a) ;
         } 
    return 0;
}

代码测试环境:  WinXP+C-Free5.0.
2017-04-24 16:59
a1350717760
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2017-4-9
得分:0 
回复 3楼 grmmylbs
谢谢大师,没想到是一个花括号的问题,
2017-04-24 17:00
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
得分:5 
https://bbs.bccn.net/thread-475824-1-1.html

关于素数,推荐我的这个帖子,一个素数贴,引出一堆高手。

09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-04-24 17:53



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




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

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