继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

如何求一个数的约数和判断一个数是不是素数?

飞翔的小马哥
关注TA
已关注
手记 5
粉丝 3
获赞 36

如果和求一个数的约数和判断一个数是不是素数?

约数:能被num整除的数,称为num的约数(其中约数不包括1和其本身)。
素数:只能被1和其本身整除的数称为素数。如2、3、5、7、11注意:1不是素数

1、求出一个数的约数。
第一种方法:把 n = 2 到 num - 1 的数都让num整除一下,能被整除就是num的约数。

for( div = 2; div < num; div++)
    if ( num % div ==0)
Printf(“%d is divisible by %d\n”, num, div);

但是这个方法有些浪费时间,我们可以改进一下。例如,考虑如果144%2得0,说明2 是144的约数;如果144除以2 得72,那么72也是144的约数。所以约数是成对存在的,num%div测试成功可以得到两个约数。为了弄清楚其中的原理,我们分析一下循环中得到的成对约数;
2和72、3和48、4和36、6和24、8和18、9和16、12和12、16和9、18和8等等。可以看出,在达到12和12 之后,又得到了之前已经找到的约数(次序相反)。因此,不用从2到144-1循环这么多次,在达到12以后就可以停止循环了。这大大节省了循环时间。
所以采用第二种方法:

for (div = 2;(div * div ) <= num; div++)
    if ( num % div == 0)
        Printf(“%d is divisible by %d and %d .\n”,
 num, div, num/div);

2、判断一个数是不是素数。
如果一个数没有约数(1和其本身不是它的约数),那么它就是素数。
第一种方法:

int judge(int n)
{
    for( div = 2; div < num; div++)
         if ( num % div ==0)
            return 0;//这个数num有约数,所以它不是素数,返回0表不是素数
    return 1;//循环一遍都没有约数,会执行这个语句。

}

第二种方法:


int judge(int n)
{

    for (div = 2;(div * div ) <= num; div++)
        If ( num % div == 0)
            return 0;//这个数num有约数,所以它不是素数,返回0表不是素数
    return 1;//循环一遍都没有约数,会执行这个语句。

}
打开App,阅读手记
3人推荐
发表评论
随时随地看视频慕课网APP

热门评论

你这素数判断有问题啊,兄弟,if语句不满足直接返回1,判断为这个数为素数,根本没有完全遍历一边所有数字

查看全部评论