1.采用枚举的方法,暴力解决 o(╯□╰)o
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
int num[] = new int[500001];
Scanner sc = new Scanner(System.in);
int t = sc.nextInt();
while (t-->0) {
int n = sc.nextInt();
if (num[n]>0) {
System.out.println(num[n]);
continue;
}
num[n] = 1;
int j = 2;
for ( ;j*j < n; j++) {
if (n%j==0) {
num[n] = num[n]+j+n/j;
}
}
if (j*j==n) {
num[n] += j;
}
System.out.println(num[n]);
}
}
}
2.类似筛选法:
当i=2时,所有2的倍数的数字(除2本身)都有因子2,
当i=3时,所有3的倍数的数字(除3本身)都有因子3,
当i=4时,所有4的倍数的数字(除4本身)都有因子4,
……
当i=250000时,所有250000的倍数的数字(除250000本身)都有因子250000
最后输出结果在加上因子1;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int num[] = new int[500001];
for (int i = 2; i <= num.length/2; i++) {
for (int j = 2*i; j < num.length; j += i) {
num[j] += i;
}
}
Scanner sc = new Scanner(System.in);
int t = sc.nextInt();
while (t-->0) {
System.out.println(num[sc.nextInt()]+1);
}
sc.close();
}
}