题目:
判断101——200之间有多少个素数,并输出所有的素数
分析:
在小学的时候,我们就知道自然数的分类可以分成很多种:奇数和偶数、素数和和数等等,所以判断101——200间多少个素数,只需要判断从2到这个数的平方根,是否有满足条件的数能被我们要判断的数整除,如果有就输出并且记数+1
源代码:
class sushu
{
public static void main(String[] args)
{
int count = 0; //用来记数的
int[] bingo ; //最后循环时进行区分
bingo = new int[100];
for(int i = 101; i < 200;i++)
{
int count1 = 0;
int k = (int)Math.sqrt(i);
for(int j = 2; j <= k;j++)
{
count1 += 1;
if(i % j == 0)
{
break;
}
else
{
if(count1 == k -1)
{
bingo[i-101] = 1;
}
}
}
if(bingo[i -101] == 1)
{
count++;
System.out.println(i);
}
}
System.out.println("满足条件的素数的个数是:"+count);
}
}
难点:
①首先,在判断素数时,因为从2到sqrt(i),要判断这么多次,所以不好直接下结论(这个数是素数),针对这点,我是提前定义了一个count1,用来记数,因为是for循环,如果一个数是素数,这就意味着它会将循环进行完看看有没有能被它整除的数,如果有,就以为值i是合数,那么bingo也肯定是0,如果不是,就意味着count1累加到了sqrt(i)-1次,从而bingo赋值为1,作为最后的判断
②刚开始的时候,没有用数组,而是直接bingo,所以开始做的时候,代码运行结果明显有问题,因为bingo被覆盖了,值一直是0
③创建数组是还是要注意,动态和静态不能同时,否则会报错,我就直接·int[] bingo = new int[100];报错了
代码截图:
另一种解法:
public class SwitchDemo
{
public static void main(String[] args)
{
int m = 101;
int n = 200;
int count = 0;
//统计素数个数
for(int i=m;i<n;i++)
{
if(isPrime(i))
{
count++;
System.out.print(i+" ");
if(count%10==0){
System.out.println();
}
}
}
System.out.println();
System.out.println("在"+m+"和"+n+"之间共有"+count+"个素数");
}
//判断素数
private static boolean isPrime(int n)
{
boolean flag = true;
if(n==1)
flag = false;
else{
for(int i=2;i<=Math.sqrt(n);i++)
{
if((n%i)==0 || n==1)
{
flag = false;
break;
}
else
flag = true;
}
}
return flag;
}
}
这个代码运行没有问题,但是我不想看,呜呜呜~~~(自己的思路,自己看的清楚)
写在最后:
想要一起学Java的小伙伴加我微信W17663712231,我的微信公众哈"空谷小莜蓝",大家一起努力!