输出400以内的smith数

来源:互联网 发布:shadowrocket 知乎 编辑:程序博客网 时间:2024/05/17 02:44

  输出400百以内的smith数。smith数是指满足下列条件的可分解的整数:

  其所有位数上的数字和等于其全部素数因子的数字之和。

  例如,9975是smith数,9975=3*5*5*7*19,即9975的数字和=因子的数字总和=30.

  补充说明一下:根据smith数的定义,素数不是smith数。

java代码实现:

public class SmithNum {/** * @param args * 输出400百以下的所有smith数 */public static void main(String[] args) {int[] num1 = new int[20];for (int i = 1; i < 400; i++) {if (isPrime(i)) // 素数不是smith数,直接pass掉continue;int k = 0;int sum1 = 0;// 所有的因子的数字总和int sum2 = 0;// i的数字总和for (int j = 2; j <= i; ++j) { // 求数i的所有素数,并存进数组num1中if (i % j == 0) {if (isPrime(j)) { // 如果为true,就把数存进数组中int[] tempArr1 = intToNumArray(j);for (int m = 0; m < tempArr1.length; m++)num1[k++] = tempArr1[m];int temp = j * j;while (i % temp == 0) {for (int m = 0; m < tempArr1.length; m++)num1[k++] = tempArr1[m];temp *= j;}}}}for (int p = 0; p < k; p++)// 求所有因子的数字之和sum1 += num1[p];int[] tempArr2 = intToNumArray(i);for (int p = 0; p < tempArr2.length; p++)// 求数字本身的数字之和sum2 += tempArr2[p];if (sum1 == sum2) {System.out.print(i+" ");}}}public static int[] intToNumArray(int n) {String str = Integer.toString(n); // 将整型数字转换成字符串int[] nums = new int[str.length()];for (int i = 0; i < str.length(); i++)// 将字符串中对应的字符数字输到数组中nums[i] = Integer.parseInt(String.valueOf(str.charAt(i)));return nums; // 返回一个整型数组}public static boolean isPrime(int n) { // 判断一个整型数是不是素数if (n == 2)return true;for (int i = 2; i <= Math.sqrt(n); i++) {if (n % i == 0)return false;}return true;}}

0 0
原创粉丝点击