问题:给定正整数N,请问多少个质数是N的约数。
提示:1不是质数
代码1:时间复杂度高,但更好理解
import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
//在此输入您的代码...
int n=scan.nextInt();
int count=0;
for(int i=2;i<=n;i++)
{
if(n%i==0&&isq(i))
{
count++;
}
}
System.out.println(count);
scan.close();
}
public static boolean isq(int n) //判断是否未质数
{
if(n<=1)
{
return false;
}
for(int j=2;j<Math.sqrt(n);j++)
{
if(n%j==0)
{
return false;
}
}
return true;
}
}
代码2:时间复杂度低
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
long n = sc.nextLong();
int ans = 0;
//对于正整数 N 来说,它的任意一个因数 T 都是它质因数的乘积
//所以当循环完毕时,要判断一下 n此时的值,若为1 说明已经把质因数找完,若不为1,那么剩下的一定是个质数
for (int i = 2; i < Math.sqrt(n); i++) { //不需要遍历到n,任何一个数,它的质因子大于根号n的要么没有,要么只有一个
if(n%i == 0) {
ans++;
}
while(n%i==0) { //以去除n中的所有等于i的因子,从而保证每个质因子只被计数一次。
n = n/i;
}
}
if (n > 1) ans++;
System.out.println(ans);
}
}