正文
java质数判断代码 java质数的判断
小程序:扫一扫查出行
【扫一扫了解最新限行尾号】
复制小程序
【扫一扫了解最新限行尾号】
复制小程序
用java语言写一个判断一个整数是否为质数的程序(要求利用三种方法逐步优化实现)
我写了几种方法,并逐步优化,并且对每一种方法进行了1000000次的调用测试每种方法的速度,仅供参考:
import java.math.BigInteger;
public class Test_04 {
/**
* 最笨重的一种方法,用该整数分别除以比它小的数,看是否能被整除
*/
public boolean isPrimeNum_1(int num) {
// 识别小于2的数
if (num 2) {
return false;
}
for (int i = 2; i num; i++) {
if (num % i == 0) {
return false;
}
}
return true;
}
/**
* 优化第一种方法br
* 1、偶数不可能是质数br
* 2、对于大于2的数,如果一个数a大于数b的一半,那么b不可能被a整除
*/
public boolean isPrimeNum_2(int num) {
// 2特殊处理
if (num == 2) {
return true;
}
// 识别小于2的数和偶数
if (num 2 || num % 2 == 0) {
return false;
}
int max = num / 2;
for (int i = 3; i max; i += 2) {
if (num % i == 0) {
return false;
}
}
return true;
}
/**
* 在第二种方法上再次优化,利用数字的性质:br
* 一个数不是素数就是合数,那么一定可以由两个自然数相乘得到,其中一个大于或等于它的平方根,br
* 一个小于或等于它的平方根,并且成对出现。br
* 这样就可以把计算量大幅度减少
*/
public boolean isPrimeNum_3(int num) {
if (num == 2) {
return true;// 2特殊处理
}
if (num 2 || num % 2 == 0) {
return false;// 识别小于2的数和偶数
}
double sqrt = Math.sqrt(num);
for (int i = 3; i = sqrt; i += 2) {
if (num % i == 0) {
return false;
}
}
return true;
}
/**
* Java中的BigInteger中已经写好了一个判断是否为质数的方法,直接用就可以了
*/
public boolean isPrimeNum_4(int num) {
BigInteger integer = BigInteger.valueOf(num);
return integer.isProbablePrime(1);
}
public static void main(String[] args) {
Test_04 test_04 = new Test_04();
int num = 991;
System.out.println(test_04.isPrimeNum_1(num));
long startTime = System.currentTimeMillis();
for (int i = 0; i 1000000; i++) {
test_04.isPrimeNum_1(num);
}
long endTime = System.currentTimeMillis();
System.out.println("第一种方法运行时间:" + (endTime - startTime) + "ms");
System.out.println(test_04.isPrimeNum_2(num));
startTime = System.currentTimeMillis();
for (int i = 0; i 1000000; i++) {
test_04.isPrimeNum_2(num);
}
endTime = System.currentTimeMillis();
System.out.println("第二种方法运行时间:" + (endTime - startTime) + "ms");
System.out.println(test_04.isPrimeNum_3(num));
startTime = System.currentTimeMillis();
for (int i = 0; i 1000000; i++) {
test_04.isPrimeNum_3(num);
}
endTime = System.currentTimeMillis();
System.out.println("第三种方法运行时间:" + (endTime - startTime) + "ms");
System.out.println(test_04.isPrimeNum_4(num));
startTime = System.currentTimeMillis();
for (int i = 0; i 1000000; i++) {
test_04.isPrimeNum_4(num);
}
endTime = System.currentTimeMillis();
System.out.println("第四种方法运行时间:" + (endTime - startTime) + "ms");
}
}
输出结果:
true
第一种方法运行时间:2732ms
true
第二种方法运行时间:671ms
true
第三种方法运行时间:68ms
true
第四种方法运行时间:1064ms
用 java 怎么判断一个数是否为质数?
质数:
public static boolean isPrime(int N){if( N 2 ) return false;
for( int i = 2 ; i*i = N; i++){if( N % i == 0) return false;return true;}
JAVA 编程方法:
public static void main(String[] args) {// TODO Auto-generated method stub
Scanner input = new Scanner(System.in);for(int i=0;i100;i++){
System.out.print("请输入数字:");int num1 = input.nextInt();if(num1==2||num1==3){
System.out.println(num1+"是质数");}else if(num1%2!=0(num1+1)%2==0){
System.out.println(num1+"是质数");}else{System.out.println(num1+"不是质数");
用java如何写代码去判断质数和合数
首先介绍下:质数是除了本身和1以外,没有质因数,就是没有数能够整除之;合数是除了本身和1以外还有第三个数能整除之。
具体示例代码如下:
public class Demo2 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.print("请输入一个数:");
int num = scan.nextInt();
int index = 0;//使用一个数来标记是质数还是合数
for (int i = 2; i num; i++) {
if (num % i == 0) {
index++;
}
}
if (index == 0) {//index等于0表示质数
System.out.println("这是个质数");
}
else {//index大于0表示合数
System.out.println("这是个合数");
}
}
}
需要注意的是:1不算质数也不算合数。
用java语言判断一个数是不是质数?
下面是我用JavaScript写的素数函数,供参考,大同小异
PrimeA=function(n,nth){/* 小于n的素数表
参数nth 指定返回第n个素数
*/
//var t0=Time.now5();
/*
方法1:利用isPrime 废弃!
var t=[];
for(var i=2;in+1;i++){
if(isPrime(i)){
t.push(i)
}
}
consolelog('方法1:耗时:'+(+Time.now5()-(+t0)));
return t
*/
//方法2:利用筛法
var p=[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59];//自己往后补充,越多越好,可以加快检测小素数的效率
if(nth n=669){
return p[n-1]
}
if(!nth n2){
return []
}
if(n=5000 !nth){
for(var i=0;i100;i++){
var j=p.indexOf(n-i);
if(j-1){return p.slice(0,j+1)};
}
return p
}
var m=nth?Math.ceil(n*Math.log(n)+1000):n; //pn ∼ nln(n)
// for(var i=5001;i=m;i+=2){
var i=5001;
while(i){
var t=Math.floor(Math.sqrt(i)), pl=p.length;
for(var j=0;jpl;j++){//p.length
if(i%p[j] == 0){
break
}else if(p[j+1]t){
p.push(i);
if(nth pl==n-1){
return i
}
break;
}
}
if(!nth i=n-1){
return p
}
i+=2;
}
return p
//方法3:Wilson测试
}
用JAVA编写程序:“判断n是不是质数”
java编程java质数判断代码,判断n不是质数java质数判断代码,循环让n除以n一半以下的数java质数判断代码,有余数就不是质数,没有就是质数,方法如下java质数判断代码:
public class TestA {
public static void main(String[] args){
//定义一个数
int n=101;
//遍历这个数的n/2+1次,除以n一半以下的数都除不尽就是质数
for(int x=2;x=(n/2+1);x++){
//n%x取余等于0就不是质数,则退出循环
if(n%x==0){
System.out.println(n+"不是质数!");
break;
}
//x等于最大值,可知n是质数
if(x==(n/2+1)){
System.out.println(n+"是质数!");
}
}
}
}
结果:
101是质数!
用java编程实现判断一个整数是否为质数
import java.io.*;
import java.util.Scanner;
public class Prime {
public static void main(String args[]) {
System.out.println("请输入一个数字:");
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
int count = 0;
if (isPrimes(num)) {
System.out.println(num + "是一个质数!");
}
else {
System.out.println(num + "不是一个质数!");
}
System.out.println(num+"后的3个质数为:");
num = num+1;
loop:while(count3)
{
//num = num+1;
if(isPrimes(num))
{
System.out.println(num);
count++;
num++;
continue loop;
}
else
{
num++;
continue loop;
}
}
}
public static boolean isPrimes(int n) {
for (int i = 2; i = Math.sqrt(n); i++) {
if (n % i == 0) {
return false;
}
}
return true;
}
}
java质数判断代码的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java质数的判断、java质数判断代码的信息别忘了在本站进行查找喔。