当前位置: 首页 > 知识库问答 >
问题:

小于n的平方根的因子数

欧阳永宁
2023-03-14

我想找出一个数的因子数,比如900,小于它的平方根。例如:900的因子有27个,我想找出小于900根的因子数,即30个,它们是1,2,3,4,5,6,9,10,12,15,18,20,25。

我目前有这个程序,通过计算质因数来找到因数的数量。例如:140的质因数是:2^2*5*7。所以因子数是:(2+1)(1+1)(1+1)[素因子的乘方]

import java.io.*;
import java.util.*;
class Solution
{
// Program to print all prime factors
static void primeFactors(int n)
{

    TreeMap tm=new TreeMap();
    int times=0;
    // Print the number of 2s that divide n
    while (n%2 == 0)
    {
        System.out.println("2");
        if(!tm.containsKey(2))
        {
            tm.put(2,1);
        }
        else
        {
            times=(int)tm.get(2);
            tm.put(2,times+1);
        }
        n = n/2;
    }

    // n must be odd at this point.  So we can skip one element (Note i = i +2)
    for (int i = 3; i <= Math.sqrt(n); i = i+2)
    {
        // While i divides n, print i and divide n
        while (n%i == 0)
        {
            System.out.println(i);
            if(!tm.containsKey(i))
            {
                tm.put(i,1);
            }
            else
            {
            times=(int)tm.get(i);
            tm.put(i,times+1);
            }
            n = n/i;
        }
    }

    // This condition is to handle the case whien n is a prime number
    // greater than 2
    if (n > 2)
    {
        System.out.println(n);
        if(!tm.containsKey(n))
        {
            tm.put(n,1);
        }
        else
        {
        times=(int)tm.get(n);
        tm.put(n,times+1);
        }
    }

    /////////////////////////////////////////////////////////////////////////////
    Set set = tm.entrySet();
    System.out.println(tm);
    Iterator num = set.iterator();
    int key=0;
    int sum=1;
    while (num.hasNext())
    {
        Map.Entry number =(Map.Entry)num.next();
        sum=sum*((int)number.getValue()+1);
    }
    System.out.println(sum);
}

public static void main(String args[])
{
    Scanner sc=new Scanner(System.in);
    int n=sc.nextInt();
    primeFactors(n);
}
}

共有1个答案

卫梓
2023-03-14

如果你有n的因子数,只需整数除以2,就可以得到小于平方根的因子数。这是因为n小于sqrt(n)的每个因子d对应于一个大于sqrt(n)的因子(即n/d),所以这些因子的数量将是总数的一半(除非n是一个完全平方,在这种情况下sqrt(n)是一个额外的因子)。但是,整数除以2可以处理转角情况。实际上,27/2=13如所愿。

 类似资料:
  • 问题内容: 我正在寻找一种以任意精度(例如点后50位数左右)计算平方根的方法。 在python中,可以使用Decimal轻松访问它: 看到强大的功能后,我浏览了文档,但没有发现任何类似的内容。 因此,我唯一的选择是编写某种数值计算方法,该方法将迭代地尝试计算答案吗? 问题答案: 这是我自己的平方根计算实现。在等待答案时,我决定尝试一下计算平方根的方法。它有很多方法,但最后我发现通过减法 pdf 链

  • 问题内容: 在python或标准库中的某个地方是否存在整数平方根?我希望它是准确的(即返回一个整数),如果没有解决办法,可以吠叫。 此刻,我滚动了自己的幼稚: 但这很丑陋,我不太相信大整数。我可以遍历正方形,如果超出了该值,则放弃,但是我认为做这样的事情有点慢。另外我想我可能正在重新发明轮子,像这样的东西肯定已经存在于python中了… 问题答案: 牛顿的方法在整数上工作得很好: 这将返回的最大整

  • python或标准库中是否有整数平方根?我希望它是精确的(即返回一个整数),如果没有解决方案,就吠叫。 此刻我卷起了我自己天真的一个: 但是它很难看,而且我不相信它是大整数。我可以遍历这些方块,如果超过了这个值就放弃,但我认为这样做会有点慢。而且我想我可能会重新发明轮子,像这样的东西肯定已经存在于python中了。。。

  • 本文向大家介绍Java实现求小于n的质数的3种方法,包括了Java实现求小于n的质数的3种方法的使用技巧和注意事项,需要的朋友参考一下 质数概念 质数,又称素数,指在一个大于1的自然数中,除了1和此整数自身外,无法被其他自然数整除的数(也可定义为只有1和本身两个因数的数)。 最小的素数是2,也是素数中唯一的偶数;其他素数都是奇数。质数有无限多个,所以不存在最大的质数。 一:根据定义去求解: 也是最

  • 问题内容: 我们是否可以仅使用Java API而不使用定制的100行算法来计算Java 中a的平方根? 问题答案: 这项工作完美!超过65536位的数字非常快!

  • 一个字符串一般有几个子串? 这里有一个链接[http://ocw.mit.edu/courses/electrice-engineering-and-computer-science/6-006-Introduction-to-algorithms-Fall-2011/lecture-videos/mit6_006F11_lec21.pdf]