java_分解质因数
Posted songzi-yang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java_分解质因数相关的知识,希望对你有一定的参考价值。
题目内容:
每个非素数(合数)都可以写成几个素数(也可称为质数)相乘的形式,这几个素数就都叫做这个合数的质因数。比如,6可以被分解为2x3,而24可以被分解为2x2x2x3。
现在,你的程序要读入一个[2,100000]范围内的整数,然后输出它的质因数分解式;当读到的就是素数时,输出它本身。
输入格式:
一个整数,范围在[2,100000]内。
输出格式:
形如:
n=axbxcxd
或
n=n
所有的符号之间都没有空格,x是小写字母x。
输入样例:
18
输出样例:
18=2x3x3
时间限制:500ms内存限制:32000kb
1 import java.util.Scanner; 2 3 public class Main { 4 5 public static void main(String[] args) { 6 // TODO Auto-generated method stub 7 Scanner in = new Scanner(System.in); 8 9 int n;//输入整数 10 int nCopy;//复制n的值 11 int prime=2;//素数,第一个是2 12 int count=0;//输出质因数个数 13 14 n=in.nextInt(); 15 16 if(prime(n)) 17 { 18 System.out.printf("%d=%d ",n,n);//n=n 19 } 20 else 21 { 22 System.out.printf("%d=",n);//n=? 23 24 nCopy=n; 25 26 while(nCopy>1) 27 { 28 if(nCopy%prime==0) 29 { 30 if(count>0) 31 { 32 System.out.print("x"); 33 } 34 nCopy=nCopy/prime; 35 System.out.print(prime); 36 count++; 37 } 38 else 39 { 40 prime++;//跳过当前素数 41 prime=nextPrime(prime);//下一个素数 42 } 43 } 44 45 System.out.printf(" ");//换行 46 47 } 48 } 49 50 public static boolean prime(int n)//判断是否素数 51 { 52 boolean isPrime=true;//假设n是素数 53 if(n==1||(n%2==0&&n!=2))//判断1和非2偶数 54 { 55 isPrime=false; 56 } 57 else if(n==2)//判断2 58 { 59 isPrime=true; 60 } 61 else//判断其他 62 { 63 for(int i=3;i<Math.sqrt(n);i=i+2) 64 { 65 if(n%i==0) 66 { 67 isPrime=false; 68 break; 69 } 70 } 71 } 72 73 return isPrime; 74 } 75 76 public static int nextPrime(int n)//找下一个素数 77 { 78 while(true) 79 { 80 if(prime(n))//如果n是素数,返回n 81 { 82 return n; 83 } 84 else//如果不是,n自增,再判断 85 { 86 n++; 87 } 88 } 89 } 90 }
以上是关于java_分解质因数的主要内容,如果未能解决你的问题,请参考以下文章
中国MOOC_零基础学Java语言_第7周 函数_1分解质因数