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)