Java:输出1~20000内的所有素数,按每行5个打印出来

1 2 public static void main(String[] args) { 3 int x,y; 4 int k=0; 5 for(x=2;x<=1000;x++) { //1~1000的素数从2开始 6 boolean flag=true; 7 for(y=2;y<x;y++) { 8 if(x%y==0) { 9 flag=false; 10 break; 11 } 12 }//判断是否是素数 13 if(flag) { 14 k++;//如果是素数,k+1 15 System.out.print(y+"\t"); 16 if(k%5==0) 17 System.out.println(x);//每5个进行输出 18 } 19 } 20 } 21 } 22

分析:函数中最费时的部分是对素数的判断,因为这里有嵌套的双循环,增加了算法的时间复杂度,可以从三个方面改进: 1、 对素数的判断仿佛进行改进,从判断除以本身能否除尽,改进为除以本身数字的平方 2、 减少循环次数,因为偶数不可能是素数,所以x直接+2 3、 把判断是否是素数重新写一个方法里,然后在main方法中调用

改进后的代码:

1 public class Su2 { 2 public static void main(String[] args) { 3 int k=0;//计数 4 System.out.println("2 "); 5 for (int i = 3; i <= 1000; i=i+2) {//外层被除数 ,因为偶数不可能是素数,所以直接+2 6 7 if(isPrime(i))//在main方法中调用isPrime(int p) 8 { 9 k++; 10 System.out.print(i); 11 if(k%5==0) 12 System.out.println("\n");//每5个进行转行 13 14 } 15 16 } 17 } 18 public static boolean isPrime(int p){//把判断是否是素数重新写一个方法里 19 for (int j = 3; j <= Math.sqrt(p); j++) {//内层除数,利用Math.sqrt求i的平方根可以减少循环次数 20 21 if(p % j == 0) 22 return false; 23 } 24 return true; 25 } 26}
点赞
收藏

评论区

加载中...

相关推荐

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

C语言函数:用位运算交换的方法交换两个变量值

void inplace_swap(int x, int y){    y  x ^ y; //Step 1    x  x ^ y; //Step 2    y  x ^ y; //Step 3 }int main(){  

Lua 学习记录

Lua可以对多个变量同时赋值,变量列表和值列表的各个元素用逗号分开赋值语句右边的值会依次赋给左边的变量a,b  1,2赋值语句会先计算右边所有的值然后再执行赋值操作x  1;y  2x, y  y, x变量个数\值的个数按变量个数补足nil变量个数<值的个数多余的值会被忽略a

oracle多表查询之经典面试题

一、笛卡尔积1.概念笛卡尔乘积是指在数学中,两个集合_X_和_Y_的笛卡尓积(Cartesianproduct),又称直积,表示为_X_×_Y_,第一个对象是_X_的成员而第二个对象是_Y_的所有可能有序对的其中一个成员。\1\简单点说就是:集合X的每个元素和集合B的每个元素进行两两组合,组合次数等于集合X元素数量

D3.js area函数

!(http://static.oschina.net/uploads/space/2015/0402/110259_Cfoo_861926.png)var area  d3.svg.area().interpolate("monotone").x(function(d) { return x(d.date); }).y0(260).y1(

Julia

算术运算符算术运算符适用于所有的基本数值类型x,一元加法,就是x本身\x,一元减法,x的相反数xy,二元加法,做加法运算xy,二元减法,做减法运算x\y,乘法,做乘法运算x/y,除法,做除法运算x^y,乘方,x的y次幂x%y,取余,x除以y然后取余数,等价于