如何计算一个数字并确定它是否为素数

时间:2013-09-22 18:20:31

标签: java

所以我有这个问题,当我计算一个数字,让我们说15,我必须显示这个:15 = 3x5但我得到的是3x5x5,我不知道如何使它,所以它只显示3x5的。然后我的另一个问题是找到我输入的数字是否是素数。有什么办法解决这个问题?我只需要那个以及之后我要编辑的其他内容。

public class PrimeFactor 
{
    public static void main(String[] args) 
    {
        Scanner input= new Scanner(System.in);
        int a;
        int d;
        int remainder=0;
        int count=2;
        int c=0;
        String s;
        System.out.println("Enter an integer to be factored:");
        a=input.nextInt();
        s="";
        d=a;
        while(a>1)
        {
            if(a>1)
            { 
                s="";
                while(a>1)
                {
                    remainder=a%count;
                    if (!(remainder>0))
                        while(remainder==0)
                        {
                            remainder=a%count;
                            if (remainder==0)
                            {    
                                a=a/count;
                                c=c+1;
                                s=s+count+"x";
                                if (a==1)
                                    s=s+count;
                            }
                            else
                                count++;
                        }
                    else 
                        count++;
                }
                if (a%count==0)
                {
                    System.out.println(d +"=" + s);
                    System.out.println(d+" is a prime number.");
                }
                else
                    System.out.println(d +"=" + s);
            }
        // TODO code application logic here
        }
    }
}    

5 个答案:

答案 0 :(得分:0)

这些是非常简单的方法,您可以使用它来计算数字并确定它是否是素数:

public static int oneFactor(int i) {
    for (int j = 2; j < i; j++) {
        if (i % j == 0)
            return j;
    }
    return -1;
}

public static Integer[] primeFactors(int i) {
    List<Integer> factors = new ArrayList<Integer>();

    boolean cont = true;
    while (cont) {
        int f = oneFactor(i);
        if (i > 1 && f != -1) {
            i /= f;
            factors.add(f);
        } else
            factors.add(i);
        if (f == -1)
            cont = false;
    }

    return factors.toArray(new Integer[factors.size()]);
}

public static boolean isPrime(int i) {
    if (i == 2 || i == 3)
        return true;

    if (i < 2 || i % 2 == 0)
        return false;

    for (int j = 3, end = (int) Math.sqrt(i); j <= end; j += 2) {
        if (i % j == 0) {
            return false;
        }
    }
    return true;
}

我确信可以使用更快的算法,但这些算法会以简单为代价,而且您似乎不需要高速方法。 它们都是以整数运行的,但很容易改变它们以便长时间工作 如果您有任何疑问,请随时提出!

答案 1 :(得分:0)

这决定了数字是否是最快的方式。另一种方法是使用for loop来确定数字的因子数量,然后如果它有两个以上的因素则说它是素数。

int num; // is the number being tested for if it's prime.
boolean isPrime = true;

for (int i = 2; i <= Math.sqrt(num); i++) // only have to test until the square root of the number
{
    if (num%i == 0) // if the number is divisible by anything from 2 - the square root of the number
    {
        isPrime = false; // it is not prime
        break; // break out of the loop because it's not prime and no more testing needed
    }
}

if (isPrime) 
{
    System.out.println(num + " is a prime number.");
}
else
{
    System.out.println(num + " is a composite number.");
}

答案 2 :(得分:0)

您没有正确构建分解字符串:

  • 如果您发现3除以a = 15,则将其设置为3x并将a设置为商,因此a=5
  • 如果您发现5除以a = 5,则会将5x追加到s,所以现在s3x5x。然后你将a设置为商,即1.因为商现在是1,你再次追加5,所以现在得到3x5x5

您要执行的操作仅在5而非a=1时追加5x5。你必须改变这个:

s=s+count+"x";
if (a==1)
    s=s+count;

到此:

if (a==1) {
    s=s+count;
} else {
    s=s+count+"x";
}

答案 3 :(得分:0)

如何尝试这样: -

for(int i = input-1; i > 0; i--) {
    if((input % i) == 0) {
            if(i == 1)
                System.out.println("Number is a prime");
            else
                System.out.println("Number is not a prime");
            break;
    }       
 }

答案 4 :(得分:0)

你想写一个循环,循环数字1到(输入数字)。如果您找到了一个因子,则打印它并将输入除以因子。 (并测试它是否可以再用相同的数字分割),否则跳到下一个数字。

继续这样做,直到您的输入分为1。

此程序会将数字分解为素数因素:

public class Factor {
    public static void main() {
        //Declares Variables
        int factor = 15;
        int i = 2;

        System.out.println("Listing Factors:\n");
        while (factor>1) {
            //Tests if 'i' is a factor of 'factor' 
            if (factor%i == 0) {
                //Prints out and divides factor
                System.out.println(i);
                factor = factor/i;
            } else {
                //Skips to next Number
                i++;
            }
        }
    }
}

<强>输出:

Listing Factors:

3
5