面试题求1到100w中的完数
一个数如果恰好等于除它本身外的因子之和,这个数就称为"完数",也叫“完美数”。例如6=1+2+3.(6的因子是1,2,3)
package com.zhao.test;import java.util.ArrayList;//知道性质做long类型用尽也不用时间public class CountTest {//是素数public boolean isShuShu(long num){for(long i=2;i<num;i++){if(num%i==0)return false;}return true;}//求完数,参数为一质数//公式wanshu = 2^(n-1)*(2^n-1) n为质数//质数的一性质 p为质数时,2^p-1为质数public long getWanShu(long shushu){long result = (long) (Math.pow(2, shushu-1)*(Math.pow(2, shushu-1)));return result;}public void getResult(long limit){long begin = System.currentTimeMillis();long range = (long) Math.sqrt(limit);for(long i=2;i<=range;i++){long wanshu=0;if(isShuShu(i)){wanshu=getWanShu(i);if(wanshu<=limit){System.out.println(wanshu);}else{break;}}}long end = System.currentTimeMillis();long time = end-begin;System.out.println("time is:"+time);}public static void main(String[] args) {CountTest ct = new CountTest();ct.getResult(1000000000000000000l);}}