你们所有人在某个时候成为程序员的过程中肯定会抛出这个问题-编写程序以检查给定数字是否为质数。
需要弄清楚的第一件事是-质数是什么意思?


质数是除1及其本身以外不能被任何数整除的数。
除1以外的任何数字都可整除的数字本身称为合成数。
现在开始编写用于确定数字是否为质数的代码,您需要考虑采用哪种方法-质数的定义非常清楚。
要使一个数为质数,它不能被1和该数本身以外的任何数整除。 所以自然地,我们开始将数字除以2,然后继续用连续的数字除以数字,直到得出数字本身。 如果在任何时候我们发现它可以被任何数整除,那不是质数!
因此,总体方法似乎已经整理完毕。 您什么时候说数字x可被数字y整除? 闪回上学日,如果x除以y的余数为0,则知道x可被y整除。
这是检查5是否为质数的示例


这是另一个示例,检查25是否为质数


我们准备好了弹药。 让我们来解决这个问题。
一种解决方法
导入java.util.Scanner;
公共类总理{
公共静态void main(String [] args){
int num,我;
/ *用作指示标志,指示是否
这个数字不是素数* /
布尔标志= true;
扫描仪扫描=新的Scanner(System.in);
/ *要求用户输入要检查的号码
素数* /
System.out.print(“输入数字:”);
/ *存储在变量中输入的数字* /
num = scan.nextInt();
/ *要使数字为素数,不得将其整除
除1及其本身以外的任何数字。 所以我们需要
开始将其除以2,然后再减一
比数字* /
for(i = 2; i <num; i ++)
{
/ *检查输入的数字是否可被当前数整除
重复编号* /
if(num%i == 0)
{
/ *如果可以整除,则肯定不是素数。
因此,将指示器标志设置为假* /
标志=假;
/ *一旦发现它可以被一整除
数字,肯定不是素数
还有多少个数字
被...整除,所以没有进一步检查的地方。
打破循环...保存迭代!! * /
打破;
}
}
/ *您的主要工作已经完成。 现在只需检查状态
指示器标志并相应地显示
结果*/
如果(标志)
{
System.out.print(“这是素数”);
}
其他{
System.out.print(“这不是素数”);
}
}
}
那么,为什么您认为我们需要在这里标记?
好吧,需要一个标记,因为如果该数字甚至可以被一个整数整除,则足以证明该数字不是质数。 但是,得出数字为质数却并非如此。 如果数字不能被一个整数整除,您是否可以得出结论是质数? 不,它可以被您尚未检查过的其他数字整除,对吧? 仅在完成整个循环后才可以得出此结论-也就是说,当您确定它不能被2到1范围内的任何数字整除时。 因此,如果该数字可被该范围内的任何数字整除,则将标记设置为false,但如果该数字不能被该范围内的任何数字整除,则该标记将保持其真实状态,那么您可以正确地得出其结论主要。
但是可变意味着任何语言的额外负担。 每次声明变量时,您都在系统上存在的有限内存中声明一定数量的空间。 因此,节省所有不必要的内存至关重要。
那么您认为我们可以在这里取消flag变量吗? 想一想-如果flag变量不存在怎么办?


换句话说,如果for循环完全迭代而没有遇到break语句,那么我们知道该数字是素数。 知道for循环是否完成的最简单方法之一就是检查其i是否等于num -我们已指示循环进行迭代,直到i的值小于num为止,因此,当i等于num时,for循环将完成迭代。
如果数字是复合数字并且遇到中断,那么我将永远不会等于num,否则for循环将不会进入当前迭代本身,对吗?
因此,对上述程序进行稍作修改将使我们能够以更少的变量并以更有效的方式实现相同的目标。
这是修改后的版本
导入java.util.Scanner;
公共类总理{
公共静态void main(String [] args){
int num,我;
扫描仪扫描=新的Scanner(System.in);
/ *要求用户输入要检查的号码
素数* /
System.out.print(“输入数字:”);
/ *存储在变量中输入的数字* /
num = scan.nextInt(); / *要使数字为素数,不得将其整除
除1及其本身以外的任何数字。 所以我们需要
开始将其除以2,然后再减一
比数字(有更有效的方法
也写这个循环* /
for(i = 2; i <num; i ++)
{
/ *检查输入的数字是否可被
当前的迭代次数* /
if(num%i == 0){
打破;
}
}
/ *现在您的主要工作已经完成,只需检查是否
for循环已完全迭代,
相应地打印结果* /
if(i == num){
System.out.print(“这是素数”);
}
其他{
System.out.print(“这不是素数
数”);
}}}
这是解决质数问题的两种方法。 尽管从表面上看这似乎是一个非常简单的问题,但对于大多数开始学习编码的业余程序员而言,它最终还是一个困惑点。
观看下面的视频,看看学生在编写素数代码时犯的最常见错误!