package 实验二316; //输出400以内的smith数, smith数是指满足一下条件的可分解的整数 // 所有位数上的数字和等于其全部素数因子的数字总和 // 9975 =3*5*5*19*7 9975的数字和 =因子的总数和=30 9+9+7+5 =他的因子 3 5 5 19 各位上面的和 import sun.security.mscapi.CPublicKey; // 思路 首先求出数本身的和,让后求出因子的和 ,等于全部素数因子的数字总和 public class A2_23 { public static void main(String[] args) { int num1[] = new int[200]; for (int i = 1; i <= 400; i++) { if (isPrime(i)) { // 素数不是smith数 。因为没有其他的因子 continue; // 基础执行下一次的循环 } int k = 0; int sum1 = 0; //所有的因子之和 int sum2 = 0; // smith数所有位置上的和 for (int j = 2; j < i; j++) { // 找2到i之间的素数 比如i等于22, j=11; if (i % j == 0) { // j是i的因子 if (isPrime(j)) { // 且j是素数 int[] temp = intTONumArray(j); // 将j中的数字存储到了数组里面 数组里面是两个11 for (int M = 0; M < temp.length; M++) { //1 1 num1[k++] = temp[M]; // nums1[1 ,1] } // 22的因子为素数的 还有一个为2 int tmpt = j * j; // tempt=11 *11; //给大的数字 9975 3 5 5 19 while (i % tmpt == 0) { //tempt 等于 for (int l = 0; l < temp.length; l++) { //temp 里面 【3】 num1[k++] = temp[l]; tmpt *= j; } } } } } for (int j = 0; j < k; j++) { sum1 += num1[j]; } // 数字的本身求和 sum2 = find(i); if (sum2 == sum1) { System.out.print(i + " "); } } } private static boolean isPrime(int i) { for (int j = 2; j < Math.sqrt(i); j++) { if (i % j == 0) { return false; } } return true; } public static int find(int n) { int shu = 0; int sum = 0; while (n != 0) { shu = n % 10; // 133 先得到3 n /= 10; // n等于13 sum += shu; } // System.out.println(sum); //求素数因子 如何去解决呢 ? 得多谢几个方法了 return sum; } public static int[] intTONumArray(int n) { //String str =Integer.toString(n); // 11传过来 String str = String.valueOf(n); int[] nums = new int[str.length()]; //长度为2 for (int i = 0; i < str.length(); i++) { nums[i] = Integer.parseInt(String.valueOf(str.charAt(i))); } //返回数组 return nums; //返回的数组里面有【1,1】 } }
实验二 求400以内的smith数
最新推荐文章于 2023-03-29 14:10:24 发布