黑马程序员技术交流社区
标题:
怎么编写一个求2-100的质数
[打印本页]
作者:
黄霄仪
时间:
2014-8-12 01:46
标题:
怎么编写一个求2-100的质数
请问质数怎么实现呀,求指教
作者:
mr.yang
时间:
2014-8-12 01:52
public static void main(String[] args) {
//打印指数的范围 从100-999 表示三位数
print(2,100);
}
private static void print(int a,int b){
for (int i = a; i < b+1; i++) {
int num = dd(i);
//队返回来的num进行判断
if(num == i-2){
System.out.println(i);
}
}
}
public static int dd(int c){
//定义一个计数器num
int num = 0;
for (int i = 2; i <c ; i++) {
if(c%i != 0){
//把传进来的数字c进行从2到c-1的取模运算 当取模运算结果不是0时 把num 加1
num++;
}
}
return num;
}
作者:
jiangweibin2573
时间:
2014-8-12 02:41
本帖最后由 jiangweibin2573 于 2014-8-12 02:46 编辑
/*
* (1)偶数都不是质数,不用判断
* (2)定义一个判断质数的方法
* (3)判断2到100之间的质数
*/
public class Test5 {
public static void main(String[] args) {
checkPrime(2,100);//将需要判断的范围传给chickPrime,包含头,不含尾
}
public static void checkPrime(int min,int max) { //判断一个范围之间的质数,并打印。
if(min%2==0)//确保从范围内的第一个奇数开始判断
min++;
for(int i=min;i<max;i=i+2 ){ //判断min和max之间的奇数
if(isPrime(i)) //调用isPrime判断是否为质数,是则输出
System.out.println(i);
}
}
private static boolean isPrime(int max){ //判断一个数是否是质数
for(int i=2;i<max;i++){ //循环起始为除数的范围,即(1,max)的开区间
if(max%i==0) { //不能被2至max-1所有数整除,则为质数
return false;
}
else if(i==max-1) {
return true;
}
}
return false;
}
}
复制代码
作者:
晓俞飞、孰能归
时间:
2014-8-12 03:02
楼上两位都是正解
作者:
Huberry
时间:
2014-8-12 03:40
感觉第一个好懂一点
作者:
MeloX
时间:
2014-8-12 05:09
import java.util.ArrayList;
import java.util.List;
/**
* 判断一个数是否为素数:
*
* 质数:
* 质数又称素数。指在一个大于1的自然数中,除了1和此整数自身外,没法被其他自然数整除的数。
* 只有两个正因数(1和自己)的自然数即为素数。比1大但不是素数的数称为合数。
* 1和0既非素数也非合数。合数是由若干个质数相乘而得到的。所以,质数是合数的基础,没有质数就没有合搜索数。
*
*
* @author melox
*
*/
public class Integer {
public static void main(String[] args) {
primesShow(getPrimes(2,100));
}
/*这里用java.lang.Integer主要是因为我的类名和java自带的有冲突*/
public static List<java.lang.Integer> getPrimes(int min,int max) throws IllegalArgumentException{
/*参数不合法抛出异常*/
if(min < 0)throw new IllegalArgumentException("参数min:"+min+"不合法!");
if(min > max) throw new IllegalArgumentException("参数min:"+min+",不能大于max:"+max);
/*确保min是从奇数开始*/
if(min % 2 == 0) min++;
/*新建一个集合用于容纳min到max范围中的素数*/
List<java.lang.Integer> primes = new ArrayList<java.lang.Integer>();
/*外层循环主要控制min到max范围中所有奇数*/
while(min<=max)
{
int sqrt =(int)Math.sqrt(min); //求出当前数的据平方根
int find = 2; //查找因数从2开始,小于等于当前数的平方根
while(find++ <= sqrt)
if(min % find==0)break; //找到因数,跳出循环
if(find > sqrt) //没找到表示是素数
primes.add(min);
min+=2;
}
return primes;
}
/***
* 打印所有素数
* @param primes
*/
public static void primesShow(List<java.lang.Integer> primes){
for (java.lang.Integer integer : primes) {
System.out.print(integer+",");
}
}
}
复制代码
作者:
weity
时间:
2014-8-12 06:58
思路说下:一个循环,i 从2~100,分别判断 i 能否被2~(i-1)整除,若都不能整除,则为质数。
作者:
李文方
时间:
2014-8-12 08:01
都很厉害,来学习了
作者:
未名以律
时间:
2014-8-12 08:08
楼上说的不错
作者:
新航向
时间:
2014-8-12 08:15
使用2层for循环,如下,当然也可以单独封装成方法
for(int i=2;i<=100;i++) //遍历2至100间的整数
{
if(i==2) //2为质数,直接打印
System.out.println(i);
for(int j=2;j<i;j++) //判断该整数i能否被2至i-1的数整除,及打印2以后的质数
{
if(i%j==0)
break;
if(i==j+1)
System.out.println(i);
复制代码
作者:
晓风
时间:
2014-8-12 10:07
都忘了什么是质数了,来学习学习。
作者:
怀念黑海岸
时间:
2014-8-12 10:36
本帖最后由 怀念黑海岸 于 2014-8-12 10:39 编辑
public static List<Integer> getPrime(int start,int end) {
List <Integer> list =new ArrayList<Integer>();
if(start==1){
list.add(1);
start++;
}if(start==2){
list.add(2);
start++;
}if(start==3){
list.add(3);
start++;
}if(start>=end){
throw new RuntimeException("请保证后面的参数大于前面的参数");
}
int temp =(int)Math.sqrt(end);
for(int i=start;i<=end;i++){
for(int j=2;j<=temp;j++){
if(i%j==0){
break;
}
if(j>=temp){
list.add(i);
}
}
}
return list;
}
public static void main(String []args){
int count =0;
List<Integer> list =getPrime(100,300);
System.out.println("输入的范围内共有"+list.size()+"个素数");
for(int each:list){
count++;
System.out.print(each+" ");
if(count%10==0){
System.out.println();
}
}
}
}
我的循环思路是比较到了大数的平方根后就不再进行比较了。这样可以少比较很多次,有利于提高代码运行效率。。
作者:
dreamseekerkun
时间:
2014-8-12 17:58
悲催,已经不知道什么叫质数了,只记得好多年前学过,如果我考到就挂了,不懂质数直接没思路的说
作者:
paozhuanyinyu
时间:
2014-8-12 18:25
public class Test5 {
public static void main(String[] args) {
checkPrime(2,100);//将需要判断的范围传给chickPrime,包含头,不含尾
}
public static void checkPrime(int min,int max) { //判断一个范围之间的质数,并打印。
if(min%2==0)//确保从范围内的第一个奇数开始判断
min++;
for(int i=min;i<max;i=i+2 ){ //判断min和max之间的奇数
if(isPrime(i)) //调用isPrime判断是否为质数,是则输出
System.out.println(i);
}
}
private static boolean isPrime(int max){ //判断一个数是否是质数
for(int i=2;i<max;i++){ //循环起始为除数的范围,即(1,max)的开区间
if(max%i==0) { //不能被2至max-1所有数整除,则为质数
return false;
}
}
return true;
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2