素数,最小公倍数,最大公约数-学习笔记

一,素数

1,素数(质数prime numbers)

  • 只有被1和它本身能整除的正整数(自然数),否则就是合数
  • 1不是素数,2是素数

2,代码编程

获取素数的办法 

方法一:对每个自然数从2求模到它本身-1

    for (int i = n; i <= m; ++i)
    {
        if (i == 1)
            continue;
        bool is_prime = true;
        for (int j = 2; j < i; ++j)
        {
            if (i % j == 0)
            {
                is_prime = false;
                break;
            }

        }
        if (is_prime)
        {
            cout << i << endl;
        }
    }

方法二:每个素数*非1的自然数=合数,先求出前面的素数再跳过合数部分再次获取素数

#define MAX 100000
int su[MAX],cnt; // 下标逻辑不对的话会造成(因局部初始化)的错误
bool isprime[MAX];

void prime()
{
    memset(isprime,1,sizeof(isprime));
    isprime[0]=isprime[1]=0;
    cnt=1;
    for(int i=2;i<MAX;i++)
    {
        if(isprime[i])
            su[cnt++]=i; // su[]保存素数的值
        for(int j=1;j<cnt&&su[j]*i<MAX;j++)
            isprime[su[j]*i]=0; // 质数*(2到cnt之间)搜索出前面的非质数
    }
}

二,最大公约数

辗转相除法:手写除法时,最后除下来的是最大公约数

// 递归实现
int f(int x, int y)
{
    if (y == 0) return x;
    else return f(y, x % y);
}

 

三,最小公倍数

两个数的乘积=该两个数的最大公约数乘以最小公倍数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值