小于 n 的平方根的 n 的因子数
number of factors of n that are less than square root of n
我想找出一个数字(比如 900)小于其平方根的因数个数。
例如:900 有 27 个因子,我想找到小于 900 的根的因子数,即 30 个,分别是 1,2,3,4,5,6,9,10,12,15,18,20, 25.
我目前有这个程序可以通过计算质因子的数量来找到因子的数量。 eg:prime 140 are: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);
}
}
这里我得到了 900 的因子数 eg:27 个因子,但我想找到小于 30 的因子数。感谢您的帮助。
如果您有 n 个因子,只需将整数除以 2 即可得到小于平方根的因子个数。这是有效的,因为 n 小于 sqrt(n) 的每个因子 d 对应于一个大于 sqrt(n) 的因子(即 n/d),所以这样的因子的数量将是总数的一半(除非 n 是一个完美的平方,在这种情况下 sqrt(n) 是一个额外的因素)。但是,整数除以 2 会处理这种极端情况。确实,27/2 = 13 符合要求。
我想找出一个数字(比如 900)小于其平方根的因数个数。 例如:900 有 27 个因子,我想找到小于 900 的根的因子数,即 30 个,分别是 1,2,3,4,5,6,9,10,12,15,18,20, 25.
我目前有这个程序可以通过计算质因子的数量来找到因子的数量。 eg:prime 140 are: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);
}
}
这里我得到了 900 的因子数 eg:27 个因子,但我想找到小于 30 的因子数。感谢您的帮助。
如果您有 n 个因子,只需将整数除以 2 即可得到小于平方根的因子个数。这是有效的,因为 n 小于 sqrt(n) 的每个因子 d 对应于一个大于 sqrt(n) 的因子(即 n/d),所以这样的因子的数量将是总数的一半(除非 n 是一个完美的平方,在这种情况下 sqrt(n) 是一个额外的因素)。但是,整数除以 2 会处理这种极端情况。确实,27/2 = 13 符合要求。