素数的测试及质因数的分解

检测一个数(n)是否为素数

1、最原始最暴力的方法:2~n-1中是否有整数能整除n  O(n);

2、效率更高的方法:

     若d是n的约数,那么n/d也是。

     所以由n=d*(n/d)可得: d<=根号n

     所以只需检测2~根号n之间是否有整数能整除n即可

代码模板:

public class PrimeNum{
    public static void main(String[] args){
        boolean res=isPrime(7L);
        System.out.println(res);
        //遍历map
        Map<Integer,Integer> map=primeFactor(100);
        StringBuilder sb=new StringBuilder();
        for(Map.entry<Integer,Integer> entry:map.entrySet()){
            int k=entry.getKey();
            int v=entry.getValue();
            for(int i=0;i<v;i++){
                sb.append("*"+k);//往动态字符串数组添加,相当于连接两个字符串
            }
        }
        System.out.println(sb.substring(1));
        System.out.println(primeFactor(100));
    }
    /**
    *测试num是否为素数
    */
    public static boolean isPrime(long num){
        for(int i=2;i*i==num;i++){
            if(num%i==0) return false;
        }
        return ture;
    }
    /**
    *质因数分解
    */
    public static Map<Integer,Integer> primeFactor(int num){
        //创建map对象  数据采用的哈希表结构
        Map<Integer,Integer> map=new HashMap<>();//质因数 及 它的出现次数
        for(int i=2;i*i<=num;i++){
            while(num%i==0){ //若num%i==0,将i作为key赋给v
                Integer v=map.get(i); //Map中的get方法,如果key不存在的话,返回值是null
                if(v==null){
                //put(key,value)将指定的值value与映射的键相关联
                    map.put(i,1);
                }else{
                    map.put(i,v+1);
                }
                num/=i;
            }
        }
        return map;
    }
}

质因数分解需要注意的是:

任何一个整数,它的质因数分解是唯一的。

其中Map集合遍历键值对方式即通过集合中每个键值对(Entry)对象,获取键值对(Entry)对象中的键与值。

Map.Entry里面包含getKey()和getValue()方法

 int k=entry.getKey();
 int v=entry.getValue();

在代码方法体中的增强for循环中:

其中Map.entry<Integer,Integer>表示当前参数的类型

(map集合以key-value保存的数据的,entry就是key-value的集合体)

entry表示返回的值,

map.entrySet()表示一个Set集合。

entrySet(): 获取Map集合中,所有的键值对(Entry)对象,以Set集合形式返回。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
质因数分解是将一个正整数分解成为几个质数的乘积的过程,可以使用Python编写一个最优解来进行质因数分解。 首先,我们可以编写一个函数来判断一个数字是否为质数。判断方法可以是从2开始,逐个除以小于其开方的数,如果能够整除,则不是质数;如果无法整除,则是质数。 接下来,我们可以编写一个函数来进行质因数分解。该函数的输入是一个正整数,输出是该数的所有质因数。方法是从2开始,如果能够整除,则将该数除以该因数,再次从2开始进行除法运算,直到该数不能再被整除为止。 下面是一个质因数分解的最优解Python代码示例: ```python import math # 判断一个数是否为质数 def is_prime(n): if n < 2: return False for i in range(2, int(math.sqrt(n)) + 1): if n % i == 0: return False return True # 质因数分解 def prime_factorization(n): factors = [] while n % 2 == 0: factors.append(2) n = n // 2 i = 3 while i <= math.sqrt(n): while n % i == 0: factors.append(i) n = n // i i += 2 if n > 2: factors.append(n) return factors # 测试 n = int(input("请输入一个正整数:")) if is_prime(n): print("{}是一个质数".format(n)) else: prime_factors = prime_factorization(n) print("{}的质因数分解为:".format(n), prime_factors) ``` 以上代码中,`is_prime`函数用于判断一个数是否为质数,`prime_factorization`函数用于进行质因数分解。在Main函数中,首先输入一个正整数并进行判断,如果是质数则输出结果,如果不是质数则进行质因数分解并输出结果。 这个最优解的质因数分解算法的时间复杂度约为O(sqrt(n)),其中n为待分解的数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值