- import java.util.Comparator;
- import java.util.TreeSet;
- public class PrimeNumberSort {
- /*
- *要求:给出16个数:3,9,43,25,2,4,11,71,63,53,7,251,279,191,51,39
- 找出其中的素数,并按从大到小的顺序输出。
- */
- public static void main(String[] args) {
- //定义数组存放16个数
- int[] arr = {3,9,43,25,2,4,11,71,63,53,7,251,279,191,51,39};
- //定义一个TreeSet用于存放素数,因为TreeSet是有序的,所以可以使用其排序,MyComparator为自定义的排序顺序
- TreeSet<Integer> ts = new TreeSet<Integer>(new MyComparator());
-
-
- for (int i = 0; i < arr.length; i++) {//遍历数组
- for (int j = 2; j <=Math.sqrt(arr[i])+1; j++) { //判断数组中的元素能否从2到它的平方根的数整除
- if(arr[i]==2) //数组中元素是2的话,它直接就是素数了
- ts.add(arr[i]); //把2放入TreeSet
- else if(arr[i]%j==0) //能被整除,证明它不是素数,终止本轮循环
- break;
- if (j > Math.sqrt(arr[i])) { //从2到这个元素的平方根,都没有能数能整除这个元素,证明它是素数
- ts.add(arr[i]);
- }
- }
- }
- System.out.println(ts.toString()); //打印最后的结果
- }
- }
- //自定义TreeSet里的比较方法
- class MyComparator implements Comparator<Integer>{
- @Override
- public int compare(Integer o1, Integer o2) {
- return o2-o1; //TreeSet里默认是从小到大排列,比较的是o1-o2,用o2-o1使其从大到小排列
- }
- }
复制代码 |