• 常用算法


    内容:判断质数

    持续更新

    # __author: _nbloser
    # date: 2018/2/4
    
    import math
    def is_prime(number):
        num_sqrt = int(math.sqrt(number))
        for i in range(2, num_sqrt + 1):
            if number % num_sqrt == 0:
                return False
        return True
    
    if __name__ == '__main__':
        n = int(input('输入要判断的数:'))
        print(is_prime(n))
    判断质数
    # __author: _nbloser
    # date: 2018/3/2
    
    ### 求a^m mod n  。 返回的d为答案,比如  2^3  mod 5 = 3 ,则返回3
    def mod(a, m, n):
        temp = m
        c = 0
        d = 1
        k = len(bin(a).replace('0b', ''))
        b = [0 for x in range(k)]  # 创建长度为k的数组/  a = [0]*10 后面这个快
        for i in range(k):
            if (0 == temp % 2):
                b[i] = 0
            else:
                b[i] = 1
            temp = temp / 2
        for i in range(k-1):
            c = c*2
            d = (d*d) % n
            if 1 == b[i]:
                c = c+1
                d = (d*a)%n
        return d
    
    """这个算法是我在学密码学的时候要用到,开始是c语言,后面我用python比较好用,我就改成python版本了,c语言版本在下面
    //求 a 的 m 次方模 n 算法
    int mod(int a, int m , int n ){
        int c = 0;
        int d = 1;
        
        //算 m 有多少二进制位,即求 k 
        int k = 1;
        int temp = 2;
        while(temp < m){
            temp = temp * 2;
            k++;
        }
        
        //把 m 放入数组 b[k]中 
        int b[k];
        int i;
        temp = m;
        for( i = 0; i < k; i++ ){
            if( 0 == temp%2){
                b[i] = 0;
            }
            else{
                b[i] = 1;
            }
            temp = temp/2;
        }
    
    
        for( i = k-1; i >= 0; i--){
            c = c * 2;
            d = (d*d) % n;
            if( 1==b[i] ){
                c = c + 1;
                d = (d*a)%n;
            }
        }
        return d;
    } 
    """
    快速取模指数算法
    # __author: _nbloser
    # date: 2018/3/3
    
    def is_leapyear(year):
        if year % 4 == 0 and year % 100 != 0 or year % 400 == 0:
            return True
        else:
            return False
    
    ##这个倒是很简单,记住就行了,/哈哈
    闰年
  • 相关阅读:
    Java知多少(下)
    Java知多少(112)数据库之删除记录
    Java知多少(111)数据库之修改记录
    Java知多少(110)数据库之插入记录
    Java知多少(109)数据库更新
    Java知多少(108)数据库查询简介
    C# Linq处理list数据
    vs2008 使用百度编辑器
    HTTP 错误 500.19
    联想R720面板右下部分按压后和上面按键串联了
  • 原文地址:https://www.cnblogs.com/-nbloser/p/8570816.html
Copyright © 2020-2023  润新知