?如果一個正整數不能被大于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()用變量接收下輸入一次就夠了。
添加回答
舉報
0/150
提交
取消