为了账号安全,请及时绑定邮箱和手机立即绑定

一到考试题,大牛帮忙看一下,有什么问题,就是执行不出来啊。

一到考试题,大牛帮忙看一下,有什么问题,就是执行不出来啊。

chore 2015-09-02 10:49:58
 如果一个正整数不能被大于1的完全平方数所整除,那么我们就将该数称为无平方数因数的数。例如,靠前的一些无平方数因数的数是{1,2,3,5,6,7,10,11,13,14,15,17,19…}。创建一个class SquareFree,其中包括一个函数getNumber,在给定一个int n后,该函数能够返回第n个最小无平方因数的数。请注意这里是从1开始的,那么如果n=1,该算法将会返回最小的无平方数因数的数。n 的取值范围为1到1,000,000,000(其中包括1和1,000,000,000) package com.imooc.concurrent; import java.util.Scanner; public class SquareFree { public static void main(String[] args) { // TODO Auto-generated method stub Scanner sc=new Scanner(System.in); System.out.println("请输入第n位的n:"); System.out.println("输入的是数字:"+sc.nextInt()); System.out.println("第"+sc.nextInt()+"位的无平方数因数的数为"+getNumber(sc.nextDouble())); sc.close(); }     public static double getNumber(double n){      double count=0, value=0;      for(double i=1;i<=Double.MAX_VALUE;i++){          for(double j=1;j<=i;j++){          if(i%(j*j)!=0){          count++;          if(count==n){          value=i;          break;                   }          }          }          }           return value; } }
查看完整描述

3 回答

已采纳
?
uSimple

TA贡献1条经验 获得超2个赞

public static int getNum(int n) {
    int count = 0;
    label:
    for (int i = 1; i <= Integer.MAX_VALUE; i++) {
        for (int j = 2; j <= i; j++) {
            if (i % (j*j) == 0) {
                continue label;
            }
        }
        if (++count == n) { return i; }
    }
    return 0;
}

j不能从1开始,另外nextInt()用变量接收下输入一次就够了。

查看完整回答
2 反对 回复 2015-09-02
  • chore
    chore
    非常感谢!
  • chore
    chore
    i的范围应该再扩到到long吧,integer的max_value是十位数,明显不够用啊。
?
chore

TA贡献2条经验 获得超0个赞

把i设置成j的开平方数效率会更高,我试了。

查看完整回答
反对 回复 2015-09-03
?
chore

TA贡献2条经验 获得超0个赞

int报错,但long没有。

55e6c0ee000140af05000247.jpg

55e6c0ee0001ecf105000250.jpg


查看完整回答
反对 回复 2015-09-02
  • 3 回答
  • 0 关注
  • 2257 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信