public static boolean IsPrime(long number) {
int begin = 2;
int end = (int) Math.sqrt(number) + 1;
for (int i = begin; i < end; i++) {
if (number % i == 0)
return false;
for_count1++;
}
return true;
}
// 得到因子
public static Set<Long> getFactor(Long number) {
Set<Long> factors = new HashSet<Long>();
Long begin = 2L;
Long end = number;
for (Long i = begin; i < end&&number!=1; i++) {
if (number % i == 0) {
factors.add(i);
while ((number % i) == 0) {
number = number / i;
for_count1++;
}
}
for_count1++;
}
if (number != 1) {
factors.add(number);
}
return factors;
}
public static Set<Integer> getFactor1(Long number) {
Set<Integer> factors = new HashSet<Integer>();
if (number % 2 == 0) {
factors.add(2);
do {
number = number / 2;
for_count2++;
} while (number % 2 == 0);
}
int i = 3;
do {
if (number % i == 0) {
factors.add(i);
do {
number = number / i;
for_count2++;
}while (number % i == 0);
}
i = i + 2;
for_count2++;
} while (number != 1);
return factors;
}
public static Set<Long> getFactor2(Long number) {
Set<Long> factors = new HashSet<Long>();
if (number % 2 == 0) {
factors.add(2L);
do {
number = number / 2;
for_count3++;
} while (number % 2 == 0);
}
Long i = 3L;
long maxFactor = (long)Math.sqrt(number);
do {
while (number % i == 0) {
factors.add(i);
number = number / i;
for_count3++;
}
i = i + 2;
for_count3++;
} while (number != 1&&i<maxFactor);
if(number!=1){
factors.add(number);
}
return factors;
}
运算结果:
2018的因子
[2, 1009] for_count1:1010
[2, 1009] for_count2:506
[2, 1009] for_count3:15
600851475143的因子
[6857, 71, 839, 1471] for_count1:6860
[6857, 71, 839, 1471] for_count2:3432
[6857, 71, 839, 1471] for_count3:3432
分享到:
相关推荐
计算一个整数N的因子个数可以通过分析其素因数分解得到。如果N的标准分解为N=p1^a1 * p2^a2 * ... * pk^ak,那么N的因子个数为(a1+1) * (a2+1) * ... * (ak+1)。这是因为每一对素因数的指数对应着一个选择因子的方式...
本文标题为“自然数的cube-free因子的个数 (1999年)”,描述中提到在黎曼假设(Riemann Hypothesis, RH)下研究了自然数的cube-free因子个数的均值估计,并得到了目前最好的上界估计。cube-free因子指的是一个自然数中...
我们可以通过将n除以5,然后对得到的商再除以5,以此类推,来计算5的因子个数。 在给定的文件名称“n!.cpp”中,我们可以推测这是一个使用C++编程语言的实现。在C++中,我们可以利用`std::vector`或者简单的数组来...
最优分解问题是一个经典的数学优化问题,它涉及到如何有效地将一个正整数n分解为若干个互不相同的自然数之和,以使得这些自然数的乘积最大化。这个问题在计算机科学和算法设计中有着广泛的应用,特别是在寻找高效...
1. **素数检测**:素数是只有两个因子(1和自身)的自然数。可以利用因子来判断一个数是否为素数,如下所示: ```javascript function isPrime(num) { if (num ) return false; for (let i = 2; i * i ; i++) {...
3. **判断完全数**:如果计算得到的真因数和等于原始数,那么这个数就是完全数。否则,它不是。 在实际编程中,我们通常会采用更高效的方法来优化搜索过程,例如使用动态规划或者在求因数时跳过不可能是因数的数,...
无立方因子数是指在自然数集中,无法被任何大于1的整数的立方整除的整数。研究无立方因子数的分布规律是数论领域的重要问题之一。本文以Riemann假设为前提,探讨了在给定范围内无立方因子数的数量分布情况,并证明了...
因为连续的两个自然数中,必有一个是偶数,偶数乘以任何自然数都会得到偶数,而偶数除了1和它本身外,至少还有一个因子2,所以它们的积一定是合数。 2. 分解质因数是将一个数表示为若干个质数的乘积,如30=2×3×5...
如果找到因子,就打印该因子并用n除以因子得到新的数,继续分解。如果找不到因子,就增加检查的数字并继续循环,直到分解完全。 这四个程序展示了Java编程中的基础算法和数据结构应用,包括递归、循环、条件判断...
完全数是一种特殊的自然数,它的所有真因子(除自身外的约数)之和恰好等于该数本身。本篇文章将深入探讨完全数的概念及其背后的数学原理,并通过一个简单的Java程序来找出10000以内的所有完全数。 #### 二、完全数...
倍数是一个数乘以一个自然数得到的结果,而因数则是组成倍数的自然数因子。例如,对于乘法表达式9×4=36,我们说36是9和4的倍数,同时9和4是36的因数。这个简单的例子,不仅展现了倍数与因数的基本概念,也是教学...
例如,2004 = 2^2 * 3^1 * 167^1,那么2004^X的因子和可以通过计算每个质因数的幂次对应的因子和,然后将它们相乘得到。这个过程中可能需要用到组合数学和快速幂算法来优化计算。 对于求整数因子和的问题,如果要...
在素数的概念中,素数是只有1和其本身两个正因子的自然数。例如,101是素数,而301不是,因为它可以被17整除。检验一个数是否为素数,通常会尝试将这个数除以2到其平方根之间的所有整数,如果存在能整除的情况,那么...
本篇将详细介绍三种不同的方法来求两个自然数m和n的最大公约数:欧几里得算法、分解质因数法以及连续整数检测法。 1. **欧几里得算法**: 欧几里得算法,又称辗转相除法,是公元前3世纪由古希腊数学家欧几里得提出...
素数是只有1和其本身两个正约数的自然数,算术基本定理指出,任何大于1的整数都可以唯一地表示为素数的乘积。 在古典密码中,公因子和最大公因子(GCD)以及公倍数和最小公倍数(LCM)的概念也非常重要。两个或多个...
在这个问题中,我们需要编写一个算法来判断一系列的自然数是否是质数的直接后代,即这些数能否被两个不同的质数相乘得到。 首先,我们来理解什么是质数。质数是大于1的自然数,除了1和它自身外,不能被其他自然数...
9. **素数判断**:素数是只有1和自身两个因子的自然数。定义一个函数`qsh(n)`,使用`filter()`结合`lambda`表达式判断2到n之间每个数是否为素数,其中`math.sqrt(x)`用于减少计算量,提高效率。最后将判断结果转换为...
在Java中,质数是大于1且只有两个正因子(1和自身)的自然数。合数则是除了1和它本身外,至少还有一个正因子的自然数。1既不是质数也不是合数。在这个例子中,`primeNumber`方法通过遍历从2到给定数减1的所有整数,...
5. 树丫法:这是一种用于分解质因数的图形方法,通过树状结构清晰地展示一个合数如何由质数相乘得到。 6. 判断质因数:并非所有因数都是质因数,只有那些同时是质数的因数才被称为质因数。例如,52的因数有1、2、4...