素数判断及矩形交集的实现

来源:互联网 发布:php yaf导出excel表格 编辑:程序博客网 时间:2024/06/17 15:11

1、给定一个正整数n,返回1到n之间所有的素数

一般做法:

    暴力枚举法:从1到n遍历,如果k是素数,则将k加入到素数的集合中。判断K是否是素数的方法,查看每一个比k小的数是否可以被k整除。

时间复杂度更低的方法,拿到一个素数,然后把该素数的倍数对应的数都删除,反复进行,直到没有可以删除的数为止。

  public static void main(String[] args){    Scanner sc=new Scanner(System.in);    int n=sc.nextInt();    boolean isprime[]=new boolean[n+1];    for(int i=0;i<isprime.length;i++)    isprime[i]=true;    for(int i=2;i<n;i++)    {    if(isprime[i]==true)    {    int p=i;    for(int j=2;j*p<=n;j++)    {    isprime[j*p]=false;    }    }    }    for(int i=2;i<n+1;i++)    {    if(isprime[i])    System.out.print(i+" ");    }    System.out.println();    }}
唯一的缺陷是需要消耗内存空间。

2、判断两个矩形是否相交

在二维平面中,如果一个矩形,他的长与X轴平行,高与Y坐标轴平行,那么我们就城举行时坐标轴对齐的,这样的矩形在数据结构上,我们用他的左下角坐标(x,y)以及管w,高h来表示。给定两个坐标轴对齐的矩形,判断他们是否相交。

首先设计矩形的数据结构

public class Rectangle {public int x;public int y;public int w;public int h;public Rectangle(int x,int y,int w,int h){this.x=x;this.y=y;this.w=w;this.h=h;}}
具体实现如下:

public static void main(String[] args) {// TODO Auto-generated method stubRectangle R=new Rectangle(1, 2, 3, 4);Rectangle S=new Rectangle(2, 3, 4, 5);System.out.println(is_interset(R, S));}public static boolean is_interset(Rectangle R,Rectangle S){return R.x<=S.x+S.w && S.x<=R.x+R.w && R.y<=S.y+S.h && S.y<=R.y+R.h;}


据说这道题在面试中出现的频率特别的高。。