课本上的一个题目不会做 输出400以内的Smith数。Smith数是指满足下列条件的可分解的整数:其所有数位上的数字和=其全部素数因子的数字总和例如:9975是Smith数,9975=3*5*5*7*19 ,即全部素数因子的数字总和。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 [java学习]给人写的求400内的SMITH数素数判定算法比较臭,时间复杂太大...算很大的数会等到你吐血,求改进版 /** *SMITH.java *Author:ArEs */ import java.util.ArrayList; public class SMITH{ //取得素数因子表public ArrayList getPrimeFactor(int num){ ArrayList pfList=new ArrayList(); int pf=2; if(isPrime(num)){ pfList.add(0,num); return pfList; } while(pf<num){ if(isPrime(pf)){ if(num%pf==0){ pfList.add(pf); num/=pf; pf=1; if(isPrime(num)){ pfList.add(num); break; } } } pf++; } return pfList; } //各位上的数字之和public int getBitAdd(int num){ int sum=0; while(num!=0){ sum+=num%10; num/=10; } return sum; } //素数判断public boolean isPrime(int num){ int i=2; if(num<=1)return false; for(;i<num;i++){ if(num%i==0)break; } if(i<num)return false; else return true; } public static void main(String []args){ int smith=2; int pf=0; SMITH s=new SMITH(); ArrayList pfList=new ArrayList(); while(smith<400){ pfList=s.getPrimeFactor(smith); pf=0; for(int i=0;i<pfList.size();i++){ pf+=s.getBitAdd(Integer.parseInt(pfList.get(i).toString())); //这里有没有其他方法?}; if(s.getBitAdd(smith)==pf){ System.out.println (smith+"\t"+pfList); } smith++; } } } //http://blog.donews.com/ArEs/archive/2005/06/07/416438.aspx http://www.java-cn.com/bbs-jsp/show.jsp?id=144949 二级考试上机题 JFrame 和 JDialog 我创建 了两个窗体 ,为什么 关闭了其中一个窗体后,整个程序就关闭了 ??? 请问java如何实现加载指定路径下的class JAVA 与 C 语言的socket通信问题,有网络通信经验的 JAVAer都进来看看。 在java中 是否有和exit sub 功能一样的指令? 初级调试问题 谁能介绍一下JAVA的基础概念,J2EE/J2SE/EJB/JMS等等,非常感谢 请教web自动测试 哪儿有powerdesign下载? java -jar 启动dos窗口的问题 servlet处理表单出现问题
素数判定算法比较臭,时间复杂太大...算很大的数会等到你吐血,求改进版
/**
*SMITH.java
*Author:ArEs
*/
import java.util.ArrayList; public class SMITH{
//取得素数因子表
public ArrayList getPrimeFactor(int num){
ArrayList pfList=new ArrayList();
int pf=2; if(isPrime(num)){
pfList.add(0,num);
return pfList;
}
while(pf<num){ if(isPrime(pf)){
if(num%pf==0){
pfList.add(pf);
num/=pf;
pf=1;
if(isPrime(num)){
pfList.add(num);
break;
}
}
}
pf++;
}
return pfList;
}
//各位上的数字之和
public int getBitAdd(int num){ int sum=0;
while(num!=0){
sum+=num%10;
num/=10;
}
return sum;
} //素数判断
public boolean isPrime(int num){
int i=2;
if(num<=1)return false; for(;i<num;i++){
if(num%i==0)break;
}
if(i<num)return false;
else return true;
} public static void main(String []args){
int smith=2;
int pf=0;
SMITH s=new SMITH();
ArrayList pfList=new ArrayList(); while(smith<400){ pfList=s.getPrimeFactor(smith);
pf=0;
for(int i=0;i<pfList.size();i++){
pf+=s.getBitAdd(Integer.parseInt(pfList.get(i).toString())); //这里有没有其他方法?
};
if(s.getBitAdd(smith)==pf){
System.out.println (smith+"\t"+pfList);
}
smith++;
}
}
}
//http://blog.donews.com/ArEs/archive/2005/06/07/416438.aspx