这个问题可能太简单了,但是还是总结一下。
质数即素数,即大于1的自然数中,除了1和它本身以外不再有其他因数的自然数,也就是说只有两个因子,1和这个数本身。
正常的思路是将这个数模2取余,若为0,则定不是素数
还有特殊情况就是,这个数需要大于1
实现如下:
public static boolean isSuShu(int x){ if (x<0){ return false; } if (x ==1 || x %2 ==0 && x !=2){ return false; } for (int i=2 ; i<x ; i++){ if ( x%i==0){ return false; } } return true; } 效率更高的实现: public static boolean isSuShu(int x ){ if (x ==1){ return false; } for (int i =2;i<Math.sqrt(x);i+=2){ if (x%i == 0){ return false; } } return true; }比如16以内的因数有 1,2,4,8,16,sqrt(16)=4,只要遍历4以内的数能不能被1和4本身以外的数整除就可以,发现4以内的数有2,4可以被2整除,所以8就不用遍历了,以此类推....
在比如24以内的因数,有1,2,3,4,6,8,12,24,sqrt(n)=4.898979485566356,这个数以内有2,3,4这些因子,正好对应因子12,8,6,所以只要遍历sqrt(n)以内的数即可,这样遍历的次数就减少了
综上,时间复杂度降为O(sqrt(n))。
质数判断
最新推荐文章于 2025-07-25 16:23:30 发布