006 判断100-200之间的素数~~C语言

一. 什么是素数

素数又称质数,指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。因此素数为非负整数。例如:1,2,3都不是素数。

二. 判断100-200之间的数是否为素数,可以用循环语句

分析思路:输入一个数n, 让n除以2,n除以3.... n除以n-1若出现整除,则不是素数。

当出现一个整除的时候,我们要停止循环。可以利用一个小技巧,当flag = 1时,代表为素数,当flag = 0时,n代表不是素数。

第一种方法:(简易法)

//1
#include<stdio.h>
int main()
{
    int i = 0;
    int j = 1;
    for (i = 100; i <= 200; i++)//从100开始,遍历100-200的数
    {
        for (j = 2; j < i; j++)//所有数都能被本身和1整除,所以这里从2到(i-1)开始判断
        {
            if (i % j == 0)
            {
                break;
            }
        }
        //break 跳出循环后,说明不为素数,if条件不满足
        if (i == j)//如果内层for循环都走完了,肯定就是i等于j了,从2到本身之前都没有因子,所以为素数
        {
            printf("%d ", i);
        }
    }
    return 0;
}

第二种方法:(利用一个数判断素数)

//2
#include<stdio.h>
int main()
{
    int i = 0;
    int j = 0;
    for (i = 100; i <= 200; i++)
    {
        int flag = 1;//利用中间数判断素数要注意每次循环把flag初始化为1,要定义在for 循环内,否则flag可能为0
        for (j = 2; j < i; j++) // 所有数都能被本身和1整除,所以这里从2到(i - 1)开始判断
        {
            if (i % j == 0)
            {
                flag = 0;
                break;
            }
        }
        if (flag)
        {
            printf("%d ", i);
        }
    }
    return 0;
}

第三种方法:(利用平方根求素数)

优点:可以化代码,减少次数。

讲解:

如果有一个整数m,他的开平方跟之前(包括开平方根本身)一定至少有一个能整除这个数的因数,因为m=a*b, a和b至少有一个数字是小于等于开平方m的,比如:25  = 5*5; 16 = 2*8; 16 = 4*4;

但如果一个素数,它的开平方根之前没有整除这个数的因数,那么这个就是用平方根判断是否为素数的依据。

//3
#include<stdio.h>
#include<math.h>
int main()
{
    int i = 0;
    int j = 0;
    for (i = 101; i <= 200; i++)
    {
        int flag = 1;//利用中间数判断素数要注意每次循环把flag初始化为1,要定义在for 循环内,否则flag可能为0
        for (j = 2; j < sqrt(i); j++)//所有数都能被本身和1整除,所以这里从2到(i - 1)开始判断
        {
            if (i % j == 0)
            {
                flag = 0;
                break;
            }
        }
        if (flag)
        {
            printf("%d ", i);
        }
    }
    return 0;
}

第四种方法:

//4
#include<stdio.h>
#include<math.h>
int main()
{
    int i = 0;
    int j = 0;
    for (i = 101; i <= 200; i+=2)
    {
        int flag = 1;//利用中间数判断素数要注意每次循环把flag初始化为1,要定义在for 循环内,否则flag可能为0
        for (j = 2; j < sqrt(i); j++)//所有数都能被本身和1整除,所以这里从2到(i - 1)开始判断
        {
            if (i % j == 0)
            {
                flag = 0;
                break;
            }
        }
        if (flag)
        {
            printf("%d ", i);
        }
    }
    return 0;
}

第五种方法:写一个函数可以判断一个数是不是素数

#include<stdio.h>
int is_prime(int i)
{
    int j = 0;
    for (j = 2; j < i; j++)
    {
        //素数的判断规则,从2到i-1进行尝试
        if (i % j == 0)
        {
            //取模操作符之后如果是0, 就不是素数
            return 0;
        }
    }
    return 1;
} 
int main()
{
    int i = 0;
    for (i = 100; i <= 200; i++)
    {
        //调用判断函数
        if (is_prime(i) == 1)
        {
            printf("%d ", i);
        }
        
    }
    printf("\n");
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dream wings

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值