注册 登录
编程论坛 JAVA论坛

请问这个怎么做哦,谢谢了

qq995354156 发布于 2017-05-04 20:59, 2295 次点击
1.集合基本操作:元素增、删、查找、更新、遍历输出
2.集合三大操作:交集、并集、差集
3.实训练习:设计一个类,要求找出1001~9999之间的所有的可逆素数
//要求步骤,即一个步骤对于一个方法:
//1.定义一个判定素数的方法
//2.找到1001~9999之间的所有的素数,保存到集合primes中
//3.在primes集合中,找到所有的可逆素数(素数abcd倒转后dcba仍然是素数),保存到集合oddprimes中
//4.在oddprimes集合中,找到所有不含偶数和5的可逆素数,保存到primes集合中
//5.输出oddprimes集合和primes集合,每行10个素数
//拓展要求.分别使用ArrayList(必选)、HashSet/TreeSet来实现上述算法

【1】1001-9999以内素数共有1061个;
【2】可逆素数有204个;
【3】1001-9999以内不含偶数或5的可逆素数共有22个:
1193 1399 1733 1913 1933 1979 3191 3319 3371 3373
3391 3719 3733 3911 3917 7177 7193 7717 9133 9173
9791 9931
4 回复
#2
凌风zx2017-05-06 11:31
import java.util.ArrayList;
import java.util.List;

/**
 * 质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数的数称为质数。
* @功能: TODO(这里用一句话描述这个类的作用) <br>
* @名称: CommTest <br>
* @日期: 2017年5月6日 上午10:49:43 <br>
* @创建人 idea<br> <br>
 */
public class CommTest
{
    /**
     * 判断给定的数是不是素数
     * 创  建  人:idea
     * 添加时间:2017年5月6日
     * @param
     * @return
     */
    public static boolean isSushu(int num){
        //初始化
        boolean flag=true;
        /**
         * 判断num能否被除1和本身之外的其他数整除
         * 判断范围:2-根号num
         * 如果有能整除的数则不是素数,终止循环
         * --尽量减少循环次数
         */
        for(int i=2;i<=Math.sqrt(num);i++){
            if(num%i==0){
                flag=false;
                break;
            }
        }
        return flag;
    }
    /**
     * 获取1001-9999范围内所有素数的集合
     * 创  建  人:idea
     * 添加时间:2017年5月6日
     * @param
     * @return
     */
    public static List<Integer> getList(){
        List<Integer> primes=new ArrayList<Integer>();
        for(int i=1001;i<=9999;i++){
            if(isSushu(i)){
                primes.add(i);
            }
        }
        return primes;
    }
     
    /**
     * 获取可逆素数集合
     * 创  建  人:idea
     * 添加时间:2017年5月6日
     * @param
     * @return
     */
    public static List<Integer> getObList(){
        List<Integer> primes=getList();
        List<Integer> oddprimes=new ArrayList<Integer>();
        for (int i : primes)
        {
            /**
             * 获取逆反数
             */
            int q=i/1000;//千位
            int b=i%1000/100;//百位
            int s=i%100/10;//十位
            int g=i%10;//个位
            int obnum=g*1000+s*100+b*10+q;
            if(isSushu(obnum)){
                oddprimes.add(i);
            }
        }
        return oddprimes;
    }
    /**
     * 获取没有偶数和5 的逆反素数
     * 创  建  人:idea
     * 添加时间:2017年5月6日
     * @param
     * @return
     */
    public static List<Integer> getSpecList(){
        List<Integer> oddprimes=getObList();
        List<Integer> primes=new ArrayList<Integer>();
        for (int i : oddprimes)
        {
            /**
             * 判断没有偶数和5 的逆反素数添加的集合
             */
            int q=i/1000;//千位
            int b=i%1000/100;//百位
            int s=i%100/10;//十位
            int g=i%10;//个位
            if(q%2==0||q==5||b%2==0||b==5||s%2==0||s==5||g%2==0||g==5){
                continue;
            }else{
                primes.add(i);
            }
        }
        return primes;
    }
   
    public static void main(String[] args){
        List<Integer> primes=getList();
        System.out.println("1001-9999以内素数共有"+primes.size()+"个");
        List<Integer> oddprimes=getObList();
        System.out.println("可逆素数有"+oddprimes.size()+"个");
        primes=getSpecList();
        System.out.println("1001-9999以内不含偶数或5的可逆素数共有"+primes.size()+"个:");
        int index=1;
        for (int i : primes)
        {
            if(index%10==0){
                System.out.println(i);
            }else{
                System.out.print(i+" ");
            }
            index++;
        }
    }
}
#3
zsh9810229842017-05-06 12:54
#4
qq9953541562017-05-06 21:37
回复 2楼 凌风zx
谢谢
#5
devever2017-08-06 16:54
又看了一次
1