「反素数java」反素数表
本篇文章给大家谈谈反素数java,以及反素数表对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、java中怎么求素数
- 2、java素数的判断
- 3、java判断素数,是素数返回true,不是素数返回false
- 4、java语言 n为偶数,将n分解为2个素数,并返回这2个素数.
- 5、用java编写一个程序段,输入一个自然数,判断该数是否为素数.
java中怎么求素数
首先楼主应该对素数的定义已经清楚了吧?其实就是一个数,如果存在1和它本身以外,有数能整除它,这个数就不是素数.
在这里,有2个关键的变量,我估计解释一下你就能看得明白这个算法了.
1.关于变量k.变量k的作用是优化整个算法,因为比如要判断一个数13是不是素数,我们没必要从2循环到13.只要循环到对13开根号.13开根号大概是3.6多,强转为int类型后是3.也就是说只要检查2,3是否能整除13.如果不能,13肯定是一个素数.因为比如48这个数,你前面检测到被4整除等于12,那么继续循环超过Math.sqrt(48)的话,无非就是得到一个反过来的被12除等于4的结果.这个没有必要.
2.关于变量j.注意点1:j是在最外层的循环体中定义的.这个时候刚定义完,j的值是初始的0.然后j从2开始,一直到小于等于k结束.这里是控制尝试整除的循环次数.一旦发现在这个范围内有数能整除i,那么就跳出循环.
所以,对于你不理解的那个部分,首先确定一点,程序只要执行到break,就说明这个数是素数.
例如我们这次k = 10,那么是要从j = 2到10逐一检测 i 是不是能被 j 整除.当j = 7的时候比如可以整除了,就跳出当前内层循环了.这时候, j 显然是不大于 k 的,因为只要是中途跳出,因为内层循环(j = 2; j = k; j++)的控制,只要在循环过程中跳出来的,那么j 肯定 = k.
只有循环到j = 10依然没有break的话,根据for循环的执行顺序,会执行j++,然后去判断j = k 是否为true,为true则继续下一次循环,否则循环结束.而在这里,如果到10还没有能够整除的话,j是会在10的基础上自增的.这时候j就=11了.
那么if ( j k )就不成立了,则i 不会被输出.
总结一点:就是如果中途or最后一次循环,找到能整除的数了,那么因为break的关系,最后就不会执行 j++, 所以j = k的条件是能保证的. 换言之,如果j k (亦即j = k 的取反)表示没有找到能整除的数.其实j最大也就只能等于k+1.
另外,,你也可以自己修改修改,来加深理解.例如
boolean isPrime; //定义布尔变量判断是否素数.是:true;否:false
for (int i = 3; i = 100; i++) {
isPrime = true;
int k = (int) Math.sqrt(i);
for (int j = 2; j = k; j++) {
if (i % j == 0) {
isPrime = false; //如果能够有数整除i,那么就不是素数.
break;
}
}
if (isPrime) {
System.out.println(i);
}
}
这样就没有必要在外层循环里就定义j这个变量了.如果我上面说的你理解还是比较困难,可以先理解用布尔变量来控制的写法.这个理解了,用j k 判断的就也很容易理解了.
java素数的判断
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class T2 {
public static void main(String[] args) {
new T2().judge1();
new T2().judge2();
}
public void judge1(){
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
try {
System.out.println("请输入一个数字");
String str = br.readLine();
int a = Integer.parseInt(str);
if(isPrimes(a)){
System.out.println(a+" 是素数");
}else{
System.out.println(a+" 不是素数");
}
}catch(NumberFormatException e){
System.out.println("只能是数字");
judge1();
}catch (IOException e) {
System.out.println("读取出错了");
}
}
private void judge2() {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
try {
System.out.println("请输入两个数用,号隔开(一个范围)");
String str = br.readLine();
String [] s = str.split(",");
int a = Integer.parseInt(s[0]);
int b = Integer.parseInt(s[1]);
isPrimes2(a, b);
}catch(NumberFormatException e){
System.out.println("格式不正确");
judge2();
}catch (IOException e) {
System.out.println("读取出错了");
}
}
private void isPrimes2(int a, int b) {
System.out.println(a+"-"+b+"范围的素数有:");
for(int i=a;i=b;i++){
if(isPrimes(i)){
System.out.print(i+",");
}
}
}
public static boolean isPrimes(int n) {
for (int i = 2; i = Math.sqrt(n); i++) {
if (n % i == 0) {
return false;
}
}
return true;
}
}
java判断素数,是素数返回true,不是素数返回false
判断n是否素数 素数是只能被1和自身整除的 所以for循环i从1到n-1判断n能否整除i 能的话就返回false 循环结束返回true
当i大于n/2时 n肯定不能整除i 推广之 for循环只需要进行到根号下n
具体代码:
for(int i;imath.sqrt(n);i++){
if(n%i==0)
return false;
}
return true;
java语言 n为偶数,将n分解为2个素数,并返回这2个素数.
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个不小于4的数");
int num = scanner.nextInt();
scanner.close();
if (num = 4) { // 不小于4
for (int i = 2; i = num / 2; i++) {
if (isPrime(i) (isPrime(num - i))) { // i 和 num-i 都是素数
System.out.println(num + "可以分解素数 " + i + "和素数 " + (num - i));
}
}
} else {
System.out.println("输入有误");
}
}
// 简单的判断素数的方法
private static boolean isPrime(int num) {
if (num 2) {
return false;
}
double sqrt = Math.sqrt(num);
for (int i = 2; i = sqrt; i++) {
if (num % i == 0) {
return false;
}
}
return true;
}
}
用java编写一个程序段,输入一个自然数,判断该数是否为素数.
使用java编写判断自然数是否为素数的方式是,使用scanner来接受用户输入的数值,使用素数的算法,实例如下:
Scanner sr = new Scanner(System.in);
System.out.print("请输入a的值:");
int a = sr.nextInt();
boolean is = true;
if (a 1)
{
System.out.println(a + "不是质数,因为他小于一");
}
else
{
ListInteger list = new ArrayListInteger();
for (int i = 2; i a; i++)
{
if (a % i != 1 a % i != a)
{
if (a % i == 0){
is=false;
list.add(i);
}
}
}
if(is){
System.out.println("a是质数");
}else{
String yz="";
for (int i = 0; i list.size(); i++)
{
if (yz=="")
{
yz=yz+list.get(i);
}else{
yz=yz+","+list.get(i);
}
}
System.out.println("a不是质数,因为他含有因子"+yz);
}
}
反素数java的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于反素数表、反素数java的信息别忘了在本站进行查找喔。