Java 对于t测试用例,查找数字的除数
测试用例的数量是t,其中Java 对于t测试用例,查找数字的除数,java,dynamic-programming,Java,Dynamic Programming,测试用例的数量是t,其中1表示,每个大于1的整数要么是素数,要么是素数的乘积。这意味着要找到一个数的所有因子,你至少需要找到它的素因子分解。一旦你有了素数分解,你可以通过乘以一些素数得到所有其他的因子。另一种方法是遍历所有合理的*整数并计算除数 这两种方法都很耗时,因为在第一种方法中,您需要 找到素数-不容易,但你不必一个接一个地去测试。素因子分解可以通过递归等方法找到 找出这些素数的所有组合,其组合低于sqrt(n) 在第二种情况下,您只需逐个进行测试,这显然很耗时 *合理整数是那些小于n平
1表示,每个大于1的整数要么是素数,要么是素数的乘积。这意味着要找到一个数的所有因子,你至少需要找到它的素因子分解。一旦你有了素数分解,你可以通过乘以一些素数得到所有其他的因子。另一种方法是遍历所有合理的*整数并计算除数
这两种方法都很耗时,因为在第一种方法中,您需要
找到素数-不容易,但你不必一个接一个地去测试。素因子分解可以通过递归等方法找到
找出这些素数的所有组合,其组合低于sqrt(n)
在第二种情况下,您只需逐个进行测试,这显然很耗时
*合理整数是那些小于n
平方根的整数,因为它是除n
的最大可能数,所以尝试更高的整数是无用的
编辑:计数到sqrt(n)
并不能得到所有的除数,但只能得到其中的一半:当您将n
除以q1
时,即=sqrt(n)
。通过最多只计算sqrt(n)
您只得到q1
s,因此您必须将最终数字加倍,然后如果n
是一个平方数,则减去1(因为您将计算sqrt(n)
两次)
public class Main{
public static void main(String args[])throws java.lang.Throwable{
Scanner in=new Scanner(System.in);
int t=Integer.parseInt(in.nextLine());
for(int i=0;i<t;i++){
System.out.println(factors(Integer.parseInt(in.nextLine())));
}
}
public static int factors(int number){
int count;
int result=1;
for (int i = 2; i<=(number); i++){
count=0;
while (number % i == 0) {
number /= i;
count++;
}
if(count == 0)
continue;
result*=(count+1);
}
return result;
}
}