大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE稳定放心使用
题目链接: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;
}
}
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/187160.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...