标签:约数 20 大数 int hun 素数 vector integer java
——————————————————一个大的阶乘的如何拆分成幂的积的形式?
例如20!
1、首先求出所有的小于100的质数(素数)
private static boolean isPrime(int sum){ if (sum<2) return false; for (int i =2;i < sum;i++){ if (sum%i == 0) return false; } return true; }
20!就可以表示成这些素数的n次方的和
2、求出这些质数的阶数
例如:
例如:20! 1.先求出20以内的素数,(2,3,5,7,11,13,17,19) 2.再求各个素数的阶数 e(2)=[20/2]+[20/4]+[20/8]+[20/16]=18; e(3)=[20/3]+[20/9]=8; e(5)=[20/5]=4; ... e(19)=[20/19]=1;
private static int jie(int n,int i,int temp){ int sum = 0; if (i<=n){ sum+=n/i; return sum+jie(n,i*temp,temp); } return sum; }
3、将所有的数值套入公式
private static void test11(){ BigInteger hun = BigInteger.ONE; Vector<Integer> vector = new Vector<>(); for (int i = 1; i < 21; i++) { if (isPrime(i)) vector.add(i); } System.out.println(vector); List<Integer> list = new ArrayList<>(); for (Integer integer : vector) { list.add(jie(20, integer, integer)); } for (Integer integer : list) { hun = hun.multiply(BigInteger.valueOf(integer+1)); } System.out.println(hun); }
标签:约数,20,大数,int,hun,素数,vector,integer,java 来源: https://blog.csdn.net/qq_54615431/article/details/122688855
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。