「素数java语言」求素数的java代码
本篇文章给大家谈谈素数java语言,以及求素数的java代码对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、Java语言求出100以内的素数(质数),并以5个一行的打印在屏幕上
- 2、java判断素数
- 3、java语言:请输入一个整数,并判断他是否为素数 急!! 正在考试
- 4、用java语言判断一个数是不是质数?
- 5、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代码的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。