Java的素数测试如何工作?
发布时间:2020-12-14 16:48:24 所属栏目:Java 来源:网络整理
导读:下面的代码片段检查给定的数字是否是素数.有人可以向我解释为什么这样做吗?这段代码是给我们一个 Java考试的学习指南. public static void main(String[] args){ int j = 2; int result = 0; int number = 0; Scanner reader = new Scanner(System.in); Sys
下面的代码片段检查给定的数字是否是素数.有人可以向我解释为什么这样做吗?这段代码是给我们一个
Java考试的学习指南.
public static void main(String[] args) { int j = 2; int result = 0; int number = 0; Scanner reader = new Scanner(System.in); System.out.println("Please enter a number: "); number = reader.nextInt(); while (j <= number / 2) { if (number % j == 0) { result = 1; } j++; } if (result == 1) { System.out.println("Number: " + number + " is Not Prime."); } else { System.out.println("Number: " + number + " is Prime. "); } } 解决方法
总体理论
条件if(number%j == 0)询问数字是否完全可被j整除 一个素质的定义是
所以如果你测试2和数字之间的所有数字,并且没有一个是完全可分的,那么它是一个素数,否则不是. 当然,你实际上并不一定要走到这个数字上,因为数字不能被一半以上的任何东西所区分开. 具体部分 循环 这部分运行在增加j的值,如果我们假设该数字= 12,那么它将通过j = 2,3,4,5,6 int j = 2; ..... while (j <= number / 2) { ........ j++; } 如果声明 本节将结果设置为1,如果在任何点数字都可以被j整除.一旦设置为1,结果将永远不会重置为0. ...... if (number % j == 0) { result = 1; } ..... 进一步改进 当然,你可以改进甚至更多,因为你实际上需要不要高于sqrt(数量),但是这个代码段已经决定不这么做了.你所需要的原因不会更高,因为如果(例如)40可以被4整除,则为4 * 10,则不需要为4和10测试.而那些对将始终低于sqrt(数). 还值得注意的是,它们似乎打算将结果用作布尔值,但实际上使用0和1的整数来代替true和false.这不是好习惯. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |