10!是362800,各位数的和是3+6+2+8+0+0=27,求100!的各位数和。
无论是double还是long都不能表示100!,因此要用到BigInteger
import java.math.BigInteger;
public class FactorialNum {
public static void main(String[] args) {
System.out.println(factorialDigitSum(100));
}
public static int factorialDigitSum(int num) {
BigInteger bigInteger = new BigInteger("1"); //初始化bigInteger
int sum = 0;
while (num != 0) {
BigInteger number = new BigInteger(String.valueOf(num));
bigInteger = bigInteger.multiply(number);
num--;
}
String tString = bigInteger.toString();
for (int i = 0;i < tString.length();i++)
sum += tString.charAt(i)-48;
return sum;
}
}
记d(n)为n的所有真因数(小于n且整除n的正整数)之和。
如果d(a) = b且d(b) = a,且a ≠ b,那么a和b构成一个亲和数对,a和b被称为亲和数。
例如,220的真因数包括1、2、4、5、10、11、20、22、44、55和100,因此d(220) = 284;而284的真因数包括1、2、4、71和142,因此d(284) = 220。
求所有小于10000的亲和数的和。
public class amicablePair {
public static void main(String[] args) {
System.out.println(SumOfAmicablePair(10000));
}
public static int SumOfAmicablePair(int num) {
int sum = 0;
for (int i = num;i > 6;i--) {
int num1 = getFactor(i);
int num2 = getFactor(num1);
if (num2 == i && num1 != i) //避免重复添加,比如6等
sum += i;
}
return sum;
}
public static int getFactor(int n) {
int result = 0;
for (int i = 1;i < n;i++) {
if (n % i == 0)
result += i;
}
return result;
}
}