java的一些特殊数字算法

 1 package specialNumber;
 2 
 3 import java.util.ArrayList;
 4 import java.util.Arrays;
 5 import java.util.HashSet;
 6 import java.util.Iterator;
 7 import java.util.List;
 8 import java.util.Set;
 9 
10 public class Sushu {
11 
12     public static void main(String[] args) {
13         List<Integer> result = new ArrayList<Integer>();
14         for (int i = 1; i < 100; i++) {
15             if (isWanshu(i))
16                 result.add(i);
17         }
18         System.out.println(result.size());
19         System.out.println(Arrays.toString(result.toArray()));
20     }
21 
22     /**
23      * 素数(质数)
24      */
25     public static boolean isSushu(int number) {
26         boolean flag = true;
27         // int mid = (int) Math.sqrt(number);
28         for (int j = 2; j * j <= number; j++) {
29             if (number % j == 0) {
30                 flag = false;
31                 break;
32             }
33         }
34         return flag;
35     }
36 
37     /**
38      * 完数
39      */
40     public static boolean isWanshu(int number) {
41         int mid = (int) Math.sqrt(number);
42         int sum = 1;
43         Set<Integer> set = new HashSet<Integer>();
44         for (int i = 2; i <= mid; i++) {
45             if (number % i == 0) {
46                 set.add(i);
47                 set.add(number / i);
48             }
49         }
50         Iterator<Integer> it = set.iterator();
51         while (it.hasNext()) {
52             int num = (Integer) it.next();
53             sum += num;
54         }
55         return sum == number;
56     }
57 
58     /**
59      * 水仙花数
60      */
61     public static boolean isShuixianhua(int number) {
62         char[] c = ("" + number).toCharArray();
63         int sum = 0;
64         for (int i = 0; i < c.length; i++) {
65             sum += Math.pow(Integer.parseInt(String.valueOf(c[i])), 3);
66         }
67         return sum == number;
68     }
69 
70     /**
71      * 平方回文数
72      */
73     public static boolean isPingFangHuiWen(int number) {
74         boolean flag = true;
75         String str = number + "";
76         char[] c = str.toCharArray();
77         int length = str.length();
78         for (int j = 0; j <= length / 2; j++) {
79             if (c[j] != c[length - 1 - j]) {
80                 flag = false;
81                 break;
82             }
83         }
84         return flag && (Math.sqrt(number) % 1 == 0);
85     }
86 
87 } 
昨天有点闲,整理了下以前的一些特殊数字的算法,做个笔记。

posted on 2012-12-19 18:55  timelyxyz  阅读(410)  评论(0编辑  收藏  举报

导航