Tau数字算法

时间:2016-09-24 13:37:25

标签: java algorithm

我正在尝试创建一个用户输入2个数字的程序,然后程序会在这个空白中给出tau数。

  • "头" number是可以除以分频器总数的数字。例如(1,2,3,4,6,8,12,24)所有这些数字都可以除24。有8个数字然后24可以除以8所以我们可以说24是一个头号。*

我认为循环中有一个错误,但我无法理解它在哪里。

import java.util.Scanner;

public class tauNumber {

    public static void main(String [] args){
        int start=0,stop=0,count=0;
        Scanner input =new Scanner(System.in);
        System.out.println("Please enter first number: ");
        start=input.nextInt();
        System.out.println("Please enter last number: ");
        stop=input.nextInt();

        for(int i=0+start;i<=stop;i++){

            for(int j=1;j<=start;j++){
                if(i%j==0){
                    count++;
                }
            }
            if(start/count==0){
                System.out.println(i+" is a tau number" );
            }
        }
    }
}

2 个答案:

答案 0 :(得分:0)

不应该说“tau number”,而应该像@Tunaki所指出的那样将它称为refactorable number

我建议您将代码分解为函数,以便更好地了解最新情况,我认为这正是您所需要的:

import java.util.Scanner;

class TauNumber {


    public static void main(String[] args){

        Scanner input =new Scanner(System.in);
        System.out.println("Please enter first number: ");
        int start=input.nextInt();
        System.out.println("Please enter last number: ");
        int stop=input.nextInt();

        for(int i=start+1; i<stop; i++){
            if(refractorable(i)){
                System.out.println("Found tau number: "+ i);
                break;
            }
        }

    }

    public static boolean refractorable(int number){
        if(sumDivisors(number) == 0) return false; 

        if(number % sumDivisors(number) == 0){
            return true;
        } else {
            return false;
        }
    }

    public static int sumDivisors(int number){
        int sum = 0;
        for(int i=1; i<=number; i++){
            if(number % i == 0){
                sum++;
            }
        }
        return sum;
    }


}

注意:我还想指出,当你指定“缺口”时,你的意思是什么?我把它作为start < x < stop,因为那是差距,但肯定是start < x <= stop

答案 1 :(得分:0)

代码中的错误是您检查start/count是否为0。要检查start是否可以count整除,您应该检查余数是否为0。因此,您应该使用模数(%)运算符而不是除法(/)运算符。

下面是一个函数的代码,用于检查其参数是否为tau数。

private static boolean isTau(int tau){
    int count = 0;
    for(int i=1; i<=tau; i++){
        if(tau % i == 0)
            count++;
    }
    return (tau % count == 0) ; //returns true if 'tau' is a tau number
}

在main方法中,您可以使用此函数:

for(int i=start; i<=stop; i++){
    if(isTau(i))
        System.out.println(i+" is a tau number");
}