Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中,如果不使用除法或模,如何确定一个数字是否为素数?_Java_Primes - Fatal编程技术网

在Java中,如果不使用除法或模,如何确定一个数字是否为素数?

在Java中,如果不使用除法或模,如何确定一个数字是否为素数?,java,primes,Java,Primes,这是我当前的代码,但它使用除法(不允许我执行此任务)。如何在不使用/或%运算符的情况下重写此代码 public class PrimeNumber { public static void main(String[] args) { int num = 31; int c = 0; for (int i = 2; i < num; i++) { if ((num - (num / i) * i) == 0)

这是我当前的代码,但它使用除法(不允许我执行此任务)。如何在不使用
/
%
运算符的情况下重写此代码

public class PrimeNumber {
    public static void main(String[] args) {
        int num = 31;
        int c = 0;

        for (int i = 2; i < num; i++) {
            if ((num - (num / i) * i) == 0)
                c++;
        }
        if (c == 0)
            System.out.println("prime");
        else
            System.out.println("not prime");
    }
}
公共类素数{
公共静态void main(字符串[]args){
int num=31;
int c=0;
for(int i=2;i
这是我刚刚为c#找到的代码,我认为它应该可以工作:

using System;

class Program
{
    static void Main()
    {
    //
    // Write prime numbers between 0 and 100.
    //
    Console.WriteLine("--- Primes between 0 and 100 ---");
    for (int i = 0; i < 100; i++)
    {
        bool prime = PrimeTool.IsPrime(i);
        if (prime)
        {
        Console.Write("Prime: ");
        Console.WriteLine(i);
        }
    }
    //
    // Write prime numbers between 10000 and 10100
    //
    Console.WriteLine("--- Primes between 10000 and 10100 ---");
    for (int i = 10000; i < 10100; i++)
    {
        if (PrimeTool.IsPrime(i))
        {
        Console.Write("Prime: ");
        Console.WriteLine(i);
        }
    }
    }
}
使用系统;
班级计划
{
静态void Main()
{
//
//写0到100之间的素数。
//
Console.WriteLine(“--Primes介于0和100之间--”);
对于(int i=0;i<100;i++)
{
bool prime=PrimeTool.IsPrime(i);
if(prime)
{
控制台。写入(“主:”);
控制台写入线(i);
}
}
//
//写出10000到10100之间的素数
//
Console.WriteLine(“--Primes介于10000和10100之间--”);
对于(int i=10000;i<10100;i++)
{
if(PrimeTool.IsPrime(i))
{
控制台。写入(“主:”);
控制台写入线(i);
}
}
}
}

这里有一种嵌套循环(半伪代码)的方法:

intx;
//检查x是否是任意两个因子的倍数x)中断;
如果(prod==x)返回“x不是素数”;
}
}
返回“x为素数”;

这应该是相当有效的,尽管对于大的数字,您希望改进它。您可以做一个检查:
如果(i1==i2&&prod>x)返回“x是素数”
,这将消除大量迭代。

从2开始循环,因为这是第一个素数:

        for (int i=2; i <=100; i++) {
            BigInteger bi = new BigInteger(""+i);
            if (bi.isProbablePrime(9999)) {
                System.out.println("Prime: " + i);
            }
        }

用于(int i=2;i)这是一个相当奇怪的约束条件。这是家庭作业吗?还有其他要求吗?是的,这是要求中的一个问题..我也很惊讶如何编写它..你们可以只使用和的加法找到素数。@thatotherguy:你们比我快了一秒钟!若这不起作用,你们至少可以开发出0到0之间的素数列表然后检查数字是否是列表的一部分我刚刚注意到我的算法不会检测素数2和3,只检测素数>4。所以你需要有一个特例来捕捉2和3。我想你可以从i1开始,在i1+1开始,来捕捉这些情况。使用1作为操作数查找素数有点像BS,但算法不能把X本身看作一个操作数,这样它就不会失败。
        for (int i=2; i <=100; i++) {
            BigInteger bi = new BigInteger(""+i);
            if (bi.isProbablePrime(9999)) {
                System.out.println("Prime: " + i);
            }
        }