为了账号安全,请及时绑定邮箱和手机立即绑定

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

标签:
C

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

约数:能被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;//循环一遍都没有约数,会执行这个语句。

}
点击查看更多内容
3人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消