Java求素数和最大公约数的简单代码示例
Java小例子:求素数
素数(质数)指的是不能被分解的数,除了1和它本身之外就没有其它数能够整除。这里是一个小例子,说明如何求取十万以内的所有素数。
素数的分布没有规律可言,所以要检验一个数是不是素数,就必须将它同所有小于它的数作除法。不过有一个简便的方法,就是不需要检验所有小于它的数,而只要检验所有小于它的素数。如果所有小于它的素数都不能将其整除,那么它就是素数。
publicclassPrimes{
publicstaticvoidmain(String[]args){
//求素数
List<Integer>primes=getPrimes(100000);
//输出结果
for(inti=0;i<primes.size();i++){
Integerprime=primes.get(i);
System.out.printf("%8d",prime);
if(i%10==9){
System.out.println();
}
}
}
/**
*求n以内的所有素数
*
*@paramn范围
*
*@returnn以内的所有素数
*/
privatestaticList<Integer>getPrimes(intn){
List<Integer>result=newArrayList<Integer>();
result.add(2);
for(inti=3;i<=n;i+=2){
if(!divisible(i,result)){
result.add(i);
}
}
returnresult;
}
/**
*判断n是否能被整除
*
*@paramn要判断的数字
*@paramprimes包含素数的列表
*
*@return如果n能被primes中任何一个整除,则返回true。
*/
privatestaticbooleandivisible(intn,List<Integer>primes){
for(Integerprime:primes){
if(n%prime==0){
returntrue;
}
}
returnfalse;
}
}
Java小例子:模拟分数的类Fraction
这里是一个模拟分数运算的例子:Fraction类。分数运算完后要用最大公约数除分子分母。所以这里也有个用辗转相除法求最大公约数的例子。另外在构造Fraction对象时如果分母为零将会抛出异常,这也是必要的检查。
publicclassFractionTest{
publicstaticvoidmain(String[]args){
Fractiona=newFraction(7,32);
Fractionb=newFraction(13,32);
System.out.println(a+"+"+b+"="+a.add(b)+"("+a.add(b).doubleValue()+")");
System.out.println(a+"-"+b+"="+a.minus(b)+"("+a.minus(b).doubleValue()+")");
System.out.println(a+"*"+b+"="+a.multiply(b)+"("+a.multiply(b).doubleValue()+")");
System.out.println(a+"/"+b+"="+a.devide(b)+"("+a.devide(b).doubleValue()+")");
}
}
//分数
classFraction{
privateintnumerator;//分子
privateintdenominator;//分母
Fraction(intnumerator,intdenominator){
if(denominator==0){
thrownewIllegalArgumentException("分母不能为0");
}
this.numerator=numerator;
this.denominator=denominator;
shrink();
}
Fraction(){
this(0,1);
}
publicintgetNumerator(){
returnnumerator;
}
publicvoidsetNumerator(intnumerator){
this.numerator=numerator;
}
publicintgetDenominator(){
returndenominator;
}
publicvoidsetDenominator(intdenominator){
this.denominator=denominator;
}
//分子分母同除以最大公约数
privateFractionshrink(){
intmaxCommonDivisor=getMaxCommonDivisor(this.denominator,this.numerator);
this.numerator/=maxCommonDivisor;
this.denominator/=maxCommonDivisor;
returnthis;
}
//辗转相除法求最大公约数
privateintgetMaxCommonDivisor(inta,intb){
intmod=a%b;
if(mod==0){
returnb;
}else{
returngetMaxCommonDivisor(b,mod);
}
}
//分数加法
publicFractionadd(Fractionthat){
returnnewFraction(this.numerator*that.denominator+this.denominator*that.numerator,
this.denominator*that.denominator);
}
//分数减法
publicFractionminus(Fractionthat){
returnnewFraction(this.numerator*that.denominator-this.denominator*that.numerator,
this.denominator*that.denominator);
}
//分数乘法
publicFractionmultiply(Fractionthat){
returnnewFraction(this.numerator*that.numerator,
this.denominator*that.denominator);
}
//分数除法
publicFractiondevide(Fractionthat){
returnnewFraction(this.numerator*that.denominator,
this.denominator*that.numerator);
}
publicdoubledoubleValue(){
return(double)numerator/denominator;
}
@Override
publicStringtoString(){
returnString.format("{%d/%d}",this.numerator,this.denominator);
}
}
运行输出:
{7/32}+{13/32}={5/8}(0.625)
{7/32}-{13/32}={-3/16}(-0.1875)
{7/32}*{13/32}={91/1024}(0.0888671875)
{7/32}/{13/32}={7/13}(0.5384615384615384)