多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

Java分解质因数搞到崩溃?别哭!一个素数数组直接封神

Java分解质因数搞到崩溃?别哭!一个素数数组直接封神 这段代码, 我费了好大劲才弄出来, 而且还是参考了网上的, 心里有点失落呀, 给你加油啦宝贝将质因数进行分解, 拿到这个, 我就把它分成两部分, 其一, 要是输入的数属于素数, 那就直接输出就行, 仅需一个用于判断素数的函数, 这个是相对比较简单的。其二, 当输入的并非素数时, 刚开始我所想的, 是去除以2、3、5、7、11, 打算展开分类讨论, 然而我还是太过稚嫩了, 我自己所测试的数据规模比较小, 当数据规模变得比较大的时候, 这种做法就不成立了, 所以只能向网络求助, 看到别人弄出了一个素数数组出来, 这才完全醒悟过来。遍历代码之际,存在一个关键步骤, 举例而言, 针对数字16, 它能够被分解成2*2*2*2。因而提出要求, 我们针对那些并非仅被去除一次的数, 都要自数组的首个素数起始再度进行去除操作。如此一来, 就需要每次为数组索引赋予一个初始值, 此初始值即为 -1。当对其执行操作时, 数组便会回到首个素数所在之处。存在着对于字符串的运用, 令人惊讶地发觉, 除去main函数之外, 别的函数同样能够调用自己所编写的函数。import java.util.Scanner; //构造一个素数数组用它去除那些合数 public class composite { public static void main(String[] args) { Scanner innew Scanner(System.in); int numberin.nextInt(); if(isPrime(number)) { System.out.print(numbernumber); } else { Out(number); } } //素数的函数 public static boolean isPrime(int i) { boolean isPrime true; for(int k2;k(int)Math.sqrt(i);k) { if(i%k0) { isPrimefalse; break; } } return isPrime; } public static void Out(int n) { int[] PrimeNumbernew int[200];//素数的数组前20个素数 int count0;//数组下标 int i; String string n ; boolean sign; //作为是否是素数的标记 //构造出一个含有200个素数的数组primeNumber[200] for (i 2; count 20; i) { //判断该数是否是素数如果是就保存到数组primeNumber[num]中 if (isPrime(i)) { PrimeNumber[count] i; count; } } for(i0;i20;i) { if(n%PrimeNumber[i]0) { n/PrimeNumber[i]; //这个if语句可以执行多次当一个语句要执行多次时可以考虑用if来实现。 if(n!1) { stringPrimeNumber[i]x; } else { stringPrimeNumber[i]; break; } i-1;//让每次都k0开始就可以让变化后的n去从2开始去除 } } System.out.print(string); } }
返回列表