Java经典案例(3)——素数问题

题目:

判断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,我的微信公众哈"空谷小莜蓝",大家一起努力!

                                                 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章