今天找了一篇"面试50题"的文档,第一题是求fibonacci数列,使用递归很容易就实现了,没什么难度.
第二题是输出101~200之间的素数,没用太长时间也做了出来,代码如下
for (int i=101;i<=200;i++) {
//计算到i的开方为止
int dest=(int)(Math.sqrt(i));
for (int j=2;j<=(int)(Math.sqrt(i));j++) {
//如果i被j整除立刻跳出内层循环
if (i%j==0) {
break;
}
//从2递增直到i的开方都没有除尽,也就是j递增到了dest,那么i就是素数
if (j>=dest) {
System.out.print(i+" ");
}
}
}
然后又进行了改进,不必进行if条件判断
2. //
a1: for (int i=101;i<=200;i++) {
for (int j=2;j<=(int)(Math.sqrt(i));j++) {
//如果i被整除,立刻跳到外层for循环
if (i%j==0){
continue a1;
}
}
//一直未被整除,输出i
System.out.print(i+" ");
}
后来又尝试用数组解决问题,不过范围是从3开始到键盘输入的数字
3. //
Scanner sc=new Scanner(System.in);
System.out.println("请输入数字:");
int number=sc.nextInt();
//创建素数数组
int[] prime=new int[10000];
prime[0]=2;
int count=1;
int time=0;
a1: for(int i=3;i<=number;i++){
//只需把素数当除数,如2,3,5,7...而不是2,3,4,5,6,7...
//但缺点是除数还是有点多,比如17的除数有2,3,5,7,11,13,
//而我们只需要除以2,3即可,因为(int)Math.sqrt(17)的值是4
for(int j=0;j
然后对上面进行了改进
4. //
Scanner sc=new Scanner(System.in);
System.out.println("请输入数字:");
int number=sc.nextInt();
int[] prime=new int[10000];
prime[0]=2;
int count=1;
int time=0;
a1: for(int i=3;i<=number;i++){
for(int j=0;j(int)Math.sqrt(i)){
break;
}
}
prime[count]=i;
count++;
}
System.out.println("从1到"+number+"之间共有"+count+"个素数,它们分别是:");
for(int i=0;i
当然,要实现要求的功能,对输出的for循环稍作修改即可,在这里就不多做描述了