这个是我写的,请问还有没有更简便的方法,本人初学,只学到循环!

解决方案 »

  1.   

    写的还不错,其实C不要到i那么大,到根号i就可以了~
      

  2.   


    但是计算根号i所花费的资源估计比循环还大吧, 二分之i应该好些.另外, 循环的时候没必要i++, 应该可以直接i=i+2的, 这样可以少一半循环.
      

  3.   

    楼主的循环用起来不错,不过貌似有点乱,用集合的话会好很多,给两个随便写的,第二种是属于楼上提供的OOXX算法
            public static void main(String[] args) {
    ArrayList list = new ArrayList();
    for(int i =101;i<=200;i++){
    if(isPrime(i))
    list.add(i);
    }
    System.out.println(list+"\n共有"+list.size()+"个素数");
    }
    public static boolean isPrime(int i){
    if(i==1)
    return false;
    boolean flag = true;
    for(int j =2;j<=Math.sqrt(i);j++){
    if(i%j==0){
    flag = false;
    }
    }
    return flag;
    }        public static void main(String[] args) {
    ArrayList list = new ArrayList();
    for(int i =101;i<=200;i++){
    list.add(i);
    for(int j = 2;j<Math.sqrt(200);j++){
    if(i%j==0){
    list.remove(Integer.valueOf(i));
    }
    }
    }
    System.out.println(list+"\n共有"+list.size()+"个素数");
    }
      

  4.   

    public class ProgramEx2 {

    public static void main(String[] args) {
    // TODO Auto-generated method stub
    for (int i=101; i<200; i+=2) {
    boolean f=true;
    for (int j=2; j<i;j++) {
    if(i%j == 0) {
    f = false;
    break;
    }
    }
    if (!f) {
    continue;
    }
    System.out.println(" "+i);
    }
    }}自我感觉也是挺麻烦的
      

  5.   


    for(int j = 2;j<Math.sqrt(200);j++){
    应当是:
    for(int j = 2;j<Math.sqrt(i);j++){
      

  6.   

    那个求素数的算法有点问题,让你算一下一百万以内的数字估计就歇菜了。
    这是我大二时候的一段代码,可以算到十亿以内的数字。public class Factorial { public long factorial(long a) {
    long resault = 1;
    if (a % 2 != 0) {
    for (long i = (a - 1); i >= 1; i--) {
    resault = resault * i;
    resault = resault % a;
    if (0 == resault) {
    return 0;
    }
    }
    return resault;
    }
    else return 0;
    }
    }
    public class Primenumber { /**
     * @author ROC 
     */
    public static void main(String[] args) {
    Factorial f = new Factorial();
    SimpleDateFormat df = new SimpleDateFormat("yyyy年MM月dd日  HH时mm分ss秒SSS");// 设置日期格式
    System.out.println("开始时间为" + df.format(new Date()));
    int i = 1;
    try {
    File file = new File("d:\\1.txt");
    FileWriter filewriter = new FileWriter(file, true);
    for (long j = 1; j <=1000000000 ; j++) {
    if (0 != f.factorial(j)) {
    long left = f.factorial(j);
    long right = j - 1;
    if (left == right) {
    //System.out.println("第" + i + "个素数为" + j);
    filewriter.write("第" + i + "个素数为" + j+"\r\n");
    i++;
    }
    }
    }
    filewriter.close();
    } catch (IOException e) {
    e.printStackTrace();
    } }
    }这段代码放到我们开发的服务器上执行 ,老半天没跑完,后来就放弃了。如果把long换成BigDecimal,可能能算的更大。
      

  7.   

    总结一下,判断某个特定的数比如1023是不是素数,直接
    FOR i = 2 TO sqrt(1023) STEP 2
    的测试就可以了但是,如果筛选一个范围内,有多少素数,如果范围较大的话,筛选法是必须的。
      

  8.   

            public static void main(String[] args) {
            ArrayList list = new ArrayList();
            for(int i =101;i<=200;i+=2){
                if(isPrime(i)){
                  System.out.println(i};
            }
             
        }
        public static boolean isPrime(int i){
            if(i==1)
                return false;
            boolean flag = true;
            for(int j =2;j<=Math.sqrt(i);j++){
                if(i%j==0){
                    flag = false;
                    break;
                }
            }
            return flag;
        }