质数的定义:质数(prime number)又称为素数,有无限多个。质数定义在大于1的自然数中,除了1和它本身以外不会再有其它因数的数称为质数。
(1)从2开始,2是最小的质数。
(2)除了2之外的偶数全都不是质数,因为除了1和自身之外它们还能被2整除。若为大于2的奇数,则进入下一步继续判断。
(3)将其开方,若从3到开方向下取整之间的所有奇数都不能将其整除,则说明该数为质数。
至于为什么只用除到其平方根?
因为如果一个数不是素数是合数(与质数相反),那么一定可以由两个自然数相乘得到,其中一个大于或等于它的平方根,一个小于或等于它的平方根。
判断一个数是否是质数
//判断一个数是否是质数(素数)
public boolean isPrimeNumber(int num){
if(num == 2) return true;//2特殊处理
if(num < 2 || num % 2 == 0) return false;//识别小于2的数和偶数
for(int i=3; i<=Math.sqrt(num); i+=2){
if(num % i == 0){//识别被奇数整除
return false;
}
}
return true;
}
给定一个正整数,编写程序计算有多少对质数的和等于输入的这个正整数,并输出结果。输入值小于1000. 如,输入为10,程序应该输出结果为2。(共有两对质数的和为10,分别为(5,5),(3,7))
public class TwoSum
{
public static void main(String[] args)
{
int a=10;
System.out.println(count(a));
}
static int count(int num)
{
int length=num/2+1;
int max=0;
for (int i = 1; i < length; i++)
{
if(IsPrime(i)&&IsPrime(num-i))//i和num-i同时为质数
{
max++;
}
}
return max;
}
static boolean IsPrime(int num)
{
boolean ret = true;
//只需要求一半,另一半不用求。比如100%4=0等同于100%25==0;
int ubound =(int) (Math.sqrt(num)+1);
for (int i = 2; i < ubound; i++)
{
if (num % i == 0)
{
ret = false;
break;
}
}
return ret;
}
}
求质数的个数
import java.util.Scanner;
public class PrimeNumber3 {
public static boolean isPrime(int num){
for (int i = 2; i < num; i++) {//运行效率不高
if ((num % i) == 0) {
return false;
}
}
return true;
}
public static void main(String[] args){
int begin;
int end;
Scanner in = new Scanner(System.in);
System.out.println("www.2cto.com 请输入起始数值:");
begin = in.nextInt();
System.out.println("请输入末尾数值:");
end = in.nextInt();
for(int i = begin;i<=end;i++){
if(isPrime(i)){
System.out.print(i + " ");
}
}
}
}