题目链接:http://poj.org/problem?id=1142
题意:找出smith数。smith数是一个数的各个位之和等于其因子的各个位之和。
解题思路:从2一直向上扫描,遇到能除的就除,求出数字的质因数
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
while(n != 0){
get(n);
n=sc.nextInt();
}
sc.close();
}
private static void get(int n) {
while(true){
n++;
if(!isPrim(n)){
if(isSmithNumber(n)){
System.out.println(n);
break;
}
}
}
}
private static boolean isSmithNumber(int n) {
int k=n;
int sum = 0;
int total = 0;
while(k/10 != 0){
sum += k % 10;
k = k / 10;
}
sum += k;
for(int i =2; i <= (int)Math.sqrt(n);){
if(n % i == 0){
n=n / i;
total += getSum(i);
}
else
i++;
}
total += getSum(n);
if(sum == total)
return true;
return false;
}
private static int getSum(int i) {
int sum = 0;
int k=i;
while(k / 10 != 0){
sum += k % 10;
k = k / 10;
}
sum += k;
return sum;
}
private static boolean isPrim(int n) {
int m = (int) Math.sqrt(n);
if(n == 2)
return true;
if(n%2 == 0)
return false;
for(int i = 3; i <= m; i = i + 2){
if(n % i == 0)
return false;
}
return true;
}
}