注册 登录
编程论坛 JAVA论坛

新人学习JAVA有个程序卡了半天,望大神帮忙!

柏拉图的理想 发布于 2015-11-20 09:58, 3007 次点击
题目:我们认为2是第一个素数,3是第二个素数,5是第三个素数,依次类推。
现在,给定两个整数n和m,0<n<=m<=200,你的程序要计算第n个素数到第m个素数之间所有的素数的和,包括第n个素数和第m个素数。

package 素数的相加;

import java.util.Scanner;

public class 素数相加实验2 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner in=new Scanner(System.in);
        int n=in.nextInt();
        int m=in.nextInt();
        int sum=0;
        
        int isPrime=1;
        for(;n<=m;n++)
        {
        for(int i=2;i<n;i++)
        {
            if(n%i ==0)
            {
                isPrime=0;
                break;
            }
        }
        if(isPrime==1)
        {
            sum=sum+n;
        }
        else
        {
            sum=sum+0;
        }
        }
        System.out.println("素数之和:"+sum);
        in.close();

    }

}
(望大神帮忙指出错误之处,小弟感激不尽)
7 回复
#2
诸葛欧阳2015-11-20 10:15
每次isPrime都要初始化
#3
林月儿2015-11-20 11:04
程序代码:
public static void main(String[] args) {
        Scanner in=new Scanner(System.in);
        int n=in.nextInt();
        int m=in.nextInt();
        int sum=0;
        
        int isPrime=1;
        n=n<2?2:n;
        for(;n<=m;n++)
        {
            for(int i=2;i*i<=n;i++)
            {
                if(n%i ==0)
                {
                    isPrime=0;
                    break;
                }
            }
            sum+=isPrime==1?n:0;
            isPrime=1;
        }
        System.out.println("素数之和:"+sum);
        in.close();
    }
#4
柏拉图的理想2015-11-20 11:48
回复 3楼 林月儿
1. n=n<2?2:n;
2. i*i<=n;
3. sum+=isPrime==1?n:0;
   isPrime=1;
这三个是什么意思,我有点看不懂
#5
林月儿2015-11-20 12:34
百度三目运算符
#6
柏拉图的理想2015-11-20 12:57
以下是引用林月儿在2015-11-20 11:04:54的发言:

 public static void main(String[] args) {
        Scanner in=new Scanner(System.in);
        int n=in.nextInt();
        int m=in.nextInt();
        int sum=0;
        
        int isPrime=1;
        n=n<2?2:n;
        for(;n<=m;n++)
        {
            for(int i=2;i*i<=n;i++)
            {
                if(n%i ==0)
                {
                    isPrime=0;
                    break;
                }
            }
            sum+=isPrime==1?n:0;
            isPrime=1;
        }
        System.out.println("素数之和:"+sum);
        in.close();
    }

太感谢了,这答案!
#7
李小东2016-01-25 01:51
import java.util.Scanner;

public class 素数相加实验2 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner in=new Scanner(System.in);
        int n=in.nextInt();
        int m=in.nextInt();
        int sum=0;
        
        int isPrime=1;
        for(;n<=m;n++)
        {
        for(int i=2;i<n;i++)
        {
            if(n%i ==0)
            {
                isPrime=0;
                break;
            }
        }
        if(isPrime==1)
        {
            sum=sum+n;
        }
        else
        {
            sum=sum+0;
        }
        }
        System.out.println("素数之和:"+sum);
        in.close();

    }

}


在第二个for的第一个if里面,isPrime被化为0了。你可以在找到素数的时候,再把它化为1.就是下面这个

import java.util.Scanner;

public class 素数相加实验2 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner in=new Scanner(System.in);
        int n=in.nextInt();
        int m=in.nextInt();
        int sum=0;
        
        int isPrime=1;
        for(;n<=m;n++)
        {
        for(int i=2;i<n;i++)
        {
            if(n%i ==0)
            {
                isPrime=0;
                break;
            }
   
    if(n%i ==1){//就是这里,
        isPrime=1;
        break;                        
        }


        }
        if(isPrime==1)
        {
            sum=sum+n;
        }
        else
        {
            sum=sum+0;
        }
        }
        System.out.println("素数之和:"+sum);
        in.close();

    }

}

希望对你有帮助,谢谢

1