发表于: 2017-08-17 23:51:03

1 1093


今天完成的任务

1.因为今天白天有事,只在晚上看了一点关于操作字符串的操作

2.然后脑抽学了一点通过筛法求质数...我知道我学这个没用,但是架不住我脑残。。


public class Math_text {//筛法求素数
   public static void main(String[] args){
int count=0,n=100;
       double m=Math.sqrt(n+0.5);//这个0.5是为了防止出现根为正整数导致少循环一个数
       int[]vis=new int[n];//申请一个长度为10000000的一维数组
       for(int i=2;i<m;i++) {//遍历被开方数,小数点后面省略
           if (vis[i] == 0) {//如果数组的值为0,即没数值
               for (int j = i * i; j < n; j += i){//补齐所有非质数
                   vis[j] = 1;
                   System.out.println(j);
           }}
}
for(int i=1;i<n;i++){//遍历数组把所有没质数循环一下
           if(vis[i]==0)
count++;}
System.out.println(m);
       System.out.println(count);
   }
}

思路就是

1.先给要求素数的区间开方

2.因为素数是不会被1和他本身整除的,所以从2开始遍历被开方数


3.每一个数的平方都是质数,而每个数的平方加它本身也是非质数,即n^2是质数,n^2+n=n(n+1,2,3,4,。。。)是非质数


4.然后你就求出所有非质数,并在数组里赋值为1


5.把所有数组里为0(int数组默认为0)打印出来,就是所有质数



明天要做的事


接着看




遇到的问题


1.是没有好好看关于块的内容,用了没加{}的for循环报错,后面加了{}就好了


2.在求素数的时候,曾让vis[0]=0,导致数据不对,后从vis[0]=1,数据没错




收获

数组是从0开始的,所以要注意这一点..


返回列表 返回列表
评论

    分享到