算法 - 数论基础

数论基础

欧几里得算法

判断两个非负整数的最大公约数。

描述:
计算两个非负整数p和q的最大公约数:若q是0,则最大的公约数是p。否则,将p除以q得到余数r,p和q的最大公约数即为q和r 的最大公约数。

public static int gcd(int p,int q){
     if(q == 0)return p;
     int r = p % q;
     return gcd(q,r);
}

素数

素数是只能被1和它本身整除的数,判断一个数是否为素数。

描述
判断一个数是否为素数:若素数为n,则判断在n/2个数中是否有n的因子,没有则为素数。

public static bool isprime(int n){
    if(n <= 1) return false;
    for(int i = 2; i <= sqrt(n); i++){
        if(n / i == 0) return false;
    }
    return true;
}

数的分解

将一个正整数分解成自然数。

描述
i为2019,i % 10 为 9 ,i / 10 为201,通过循环依次分解。

int digits(int i){
    int t;
    while(i){
        t = i % 10;
        cout<<t<<" ";
        i /= 10;
    }
    return 0;
}

两点间距

在这里插入图片描述
描述
判断一个探测器在一个矩阵中能探测到多少个点。

//x,y,为探测器坐标,a为矩阵数组,r为探测半径
void idstance(int x,int y,int a,int r){
    for(int i = 0; i < n; i++)
        for(int j = 0; j < n; j++){
            int r1 = sqrt((x - i)*(x - i) + (y - j)*(y - j));
            if(r1 <= r) a[i][j] = 1;//标记探测点      
        }
}

判断闰年

bool is(int n){
    if(n % 400 == 0 || (n % 4 == 0 && n % 100 != 0) 
         return true;
    return false;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值