黑马程序员技术交流社区

标题: 判断101-200之间有多少个素数 [打印本页]

作者: 小胡    时间: 2016-1-1 15:31
标题: 判断101-200之间有多少个素数
判断101-200之间有多少个素数,并输出所有素数(用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数)。
作者: iori    时间: 2016-1-1 17:12
你是想知道代码怎么写,还只是随便说说?
作者: 小胡    时间: 2016-1-6 15:43
代码怎么写?

作者: 549208564    时间: 2016-1-6 17:53
其实我不知道什么是素数,所以不知道对不对,就将不能被2除的数打印出来,看到后回一下什么是素数

public class MySqrt {
        public static void main(String[] args) {
                sqrt(101, 200);
               
        }
        public static void sqrt(int start,int end){
                int cunte=0;
                for(;start<=end;start++){
                        if(start%2!=0){
                                cunte++;
                                System.out.println(start);
                        }
                }
                System.out.println(cunte);
        }
}
作者: fengfeng520    时间: 2016-1-6 21:49
代码怎么写?
作者: 空与夏虫语冰    时间: 2016-1-7 09:59
public static void main(String[] args) {
                //设定三个集合
                HashSet<Integer> list = new HashSet<>();
                HashSet<Integer> list1 = new HashSet<>();
                HashSet<Integer> list2 = new HashSet<>();
                //往list添加元素
                for (int i = 101; i <= 200; i++) {
                        list.add(i);
                }
                //遍历list,去掉偶数(不是素数的数);
                Iterator<Integer> it = list.iterator();
                while(it.hasNext()){
                        if (it.next() % 2 == 0) {
                                it.remove();
                        }
                }
                //假如某奇数的平方在101-200中,讲该平方值加入list1
                int x = 0;
                for (int i = 0; i < 15; i++) {
                        x = (2 * i + 1 ) * (2 * i + 1);
                        if (x > 101 && x < 200) {
                                list1.add(x);
                        }
                }
                //将奇数与奇数相乘,如果积在101-200之间,讲该积假如集合list2
                //用Set集合的好处就是这里可以去除list2中的重复元素,j<=i 是为了提高效率
                int y = 0;
                for (int i = 1; i < 67; i++) {
                        int m = 2 * i + 1;
                        for (int j = 1; j <= i; j++) {
                                int n = 2 * j + 1;
                                if ((y = m * n) > 101 && y < 200) {
                                        list2.add(y);
                                }
                        }
                }
                //从list中去掉不是素数的数,剩下的就是想要的;
                list.removeAll(list1);
                list.removeAll(list2);
                System.out.println(list.size());
                System.out.println(list);
        }
输出结果:
21
[137, 139, 131, 157, 149, 151, 173, 163, 167, 191, 179, 181, 197, 199, 193, 103, 101, 109, 107, 113, 127]
作者: 一大把手    时间: 2016-1-7 14:38
楼上写的太复杂了
class Test6
{
        public static void main(String[]args)
        {
                //打印所有的三位质数,也就是大于等于100,小于200的数
                for(int x=100;x<200;x++)
                {
                        //用count计数
                        int count=0;
                        int temp =(x+2)/2;
                        //将x依次除以1到(x+2)/2
                        for (int y=1;y<temp;y++)
                        {
                                if((x%y)==0)
                                        count++;
                        }
                        if(count<2)
                                System.out.println("质数="+x);
                }
        }
}
作者: 549208564    时间: 2016-1-7 14:56
可以得到101~200的素数,但没扩展性,性能很差
    public static void main(String[] args) {
        sqrt(101, 200);
    }
    public static void sqrt(int start,int end){
        int cunte=0;
       W: for(;start<=end;start++){
                //创建一人标记
                int cuntes=0;
                //创建一个循环,用来作为除数
                for(int x=2;x<20;x++){
                        if(start%x==0){
                                //当一个数被除零后就代表不是素数,跳出循环继续
                                continue W;
                        }else{
                                cuntes++;
                                //创建一个判断语句,只有每个数都除不尽,就是素数
                                if(cuntes==18){
                                        System.out.println(start);
                                        cunte++;
                                }
                        }
                }
        }
       System.out.println(cunte);
    }
作者: 542826323    时间: 2016-1-7 16:27
通向成功的道路有很多条,看你选哪一条了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2