「素数java语言」求素数的java代码

博主:adminadmin 2023-01-04 03:36:06 829

本篇文章给大家谈谈素数java语言,以及求素数的java代码对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

Java语言求出100以内的素数(质数),并以5个一行的打印在屏幕上

测试结果

2 3 5 7 11

13 17 19 23 29

31 37 41 43 47

53 59 61 67 71

73 79 83 89 97

public class PramNum {

/**

* 将一个大于6的偶数写为两个素数之和 输入quit退出程序

*

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

for(int i = 2, j = 0; i = 100; i++) {

if(prime(i)) {

System.out.printf("%5d", i);

j++;

if(j % 5 == 0 j != 0) {

System.out.println();

}

}

}

}

/**

* 判断是否为素数的方法

*

* @param num

* @return

*/

public static boolean prime(int num) {

if(num == 2) return true;

boolean flag = true;// 判断是否为素数的变量

for (int m = 2; m = (num - 1); m++) {// 循环2 因为1和本身肯定能被整除

// 所以从2开始至当前数-1循环

if (num % m == 0) {// 如果循环2循环到有数能被当前数整除 则跳出循环2 并且当前数不是质数

// 设置flag为false

flag = false;

break;

}

}

return flag;

}

}

java判断素数

楼主,首先你得知道,java是面向对象的语言。而c语言是面向过程的。

C语言你可以用scanf输入n。但是java是面向对象的。你想从屏幕得到一个数。必须调用一个类的方法从而取得n。这些类就是输入输出流对象。如BufferedReader等。

建议你去看看java的输入输出流。

一下是代码:

import java.io.*;

public class SystemInTest{

//判断是否为质数,是的话返回true不是的话返回false

public static boolean isPrimeNumber(int n)

{

//2为质数

if(2==n)

{

return true;

}

for(int i=2;in;i++)

{

if(n%i==0)

return false;

}

return true;

}

public static void main(String [] args) throws NumberFormatException, IOException{

int n=0;

while(true){//为了方便测试,无限循环

System.out.println("请输入一个大于1的整数:");

//以屏幕为输入源 新建一个BufferedReader

BufferedReader bin=new BufferedReader(new InputStreamReader(System.in));

n=Integer.parseInt(bin.readLine()); //从屏幕得到的是字符串类型的,转换为整数类型

if(isPrimeNumber(n))

{

System.out.println(n+":是一个质数.");

}else{

System.out.println(n+"不是一个质数.");

}

}

}

}

java语言:请输入一个整数,并判断他是否为素数 急!! 正在考试

1. 根据概念判断:

如果一个正整数只有两个因子, 1和p,则称p为素数.

public boolean isPrime(int n)

{

if(n 2) return false;

for(int i = 2; i n; ++i)

if(n%i == 0) return false;

return true;

}

时间复杂度O(n).

2. 改进, 去掉偶数的判断

public boolean isPrime(int n)

{

if(n 2) return false;

if(n == 2) return true;

if(n%2==0) return false;

for(int i = 3; i n; i += 2)

if(n%i == 0) return false;

return true;

}

时间复杂度O(n/2), 速度提高一倍.

3. 进一步减少判断的范围

定理: 如果n不是素数, 则n有满足1 d=sqrt(n)的一个因子d.

证明: 如果n不是素数, 则由定义n有一个因子d满足1 d n.

如果d大于sqrt(n), 则n/d是满足1 n/d=sqrt(n)的一个因子.

public boolean isPrime(int n)

{

if(n 2) return false;

if(n == 2) return true;

if(n%2==0) return false;

for(int i = 3; i*i = n; i += 2)

if(n%i == 0) return false;

return true;

}

时间复杂度O(Math.sqrt(n)/2), 速度提高O((n-Math.sqrt(n))/2).

4. 剔除因子中的重复判断.

定理: 如果n不是素数, 则n有满足1 d=Math.sqrt(n)的一个"素数"因子d.

证明: I1. 如果n不是素数, 则n有满足1 d=Math.sqrt(n)的一个因子d.

I2. 如果d是素数, 则定理得证, 算法终止.

I3. 令n=d, 并转到步骤I1.

由于不可能无限分解n的因子, 因此上述证明的算法最终会停止.

// primes是递增的素数序列: 2, 3, 5, 7, ...

// 更准确地说primes序列包含1-Math.sqrt(n)范围内的所有素数

public boolean isPrime(int primes[], int n)

{

if(n 2) return false;

for(int i = 0; primes[i]*primes[i] = n; ++i)

if(n%primes[i] == 0) return false;

return true;

}

5. 构造素数序列primes: 2, 3, 5, 7, ...

由4的算法我们知道, 在素数序列已经被构造的情况下, 判断n是否为素数效率很高;

下面程序可以输出素数表.

public class ShowPrimeNumber{

public static int[] getPrimeNums(int maxNum){

int[] primeNums = new int[maxNum/2+1];

int sqrtRoot;

int cursor = 0;

boolean isPrime;

for(int i=2;i=maxNum;i++){

sqrtRoot = (int)Math.sqrt(i); //取平方根

isPrime = true;

for(int j=0;j cursor;j++){

if(primeNums[j]sqrtRoot)

break;

if(i%primeNums[j]==0){

isPrime = false;

break;

}

}

if(isPrime){

primeNums[cursor++] = i;

}

}

int[] result = new int[cursor];

System.arraycopy(primeNums,0,result,0,cursor);

return result;

}

public static void main(String[] args) throws Exception{

int maxNum = Integer.parseInt(args[0]);

int[] primeNums = getPrimeNums(maxNum);

System.out.println("共"+primeNums.length+"个素数");

for(int i=0;i primeNums.length;i++){

System.out.print(primeNums[i]+",\t");

}

}

}

6.(在素数表中)二分查找

Arrays.BinarySearch方法:

该方法用于在指定数组中查找给定的值,采用二分法实现,所以要求传入的数组已经是排序了的。

该方法的基本语法格式为:

Static int binarySearch(byte[] a, byte key)

该方法返回数据中key元素所在的位置,如果没有key元素,则返回key应插入的位置:-(insertion point-1),如数组中的第一个元素就大于key,返回-1。

注:数组的数据类型可以是int[] byte[] short[] float[] long[] double[] char[] Object[]类型。

用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语言中,用类的方法求素数

判断素数方法,你供参考,代码如下:

public class SuNum {

public static void main(String[] args) {

if(getResult(4)){

System.out.println("素数");

}else{

System.out.println("非素数");

}

}

public static boolean getResult(int num) {

boolean isPrime = true; // 定义布尔变量判断是否素数.是:true;否:false

int k = (int) Math.sqrt(num);

for (int j = 2; j = k; j++) {

if (num % j == 0) {

isPrime = false; // 如果能够有数整除num,那么就不是素数.

}

}

if (isPrime) {

isPrime = true;

}

return isPrime;

}

}

满意请采纳!

关于素数java语言和求素数的java代码的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。