问题: 接受一个号码并显示消息" PRIME"如果数字是素数,否则显示消息" COMPOSITE"。
我无法入睡,想想我怎么能为此编写代码。我想如果我在这里得到逻辑可能很容易。对不起,伙计们,我只是个初学者
那么你能帮我解决这个问题。
我的教授告诉我,我可以在这些代码中得到逻辑,但我仍然感到困惑:D
这是我的最后一个代码,用于获取我的教授告诉我的因素,我可以在这里得到逻辑。 (我不知道如何:D)
import java.util.Scanner;
public class Factors {
public static void main(String[] args) {
Scanner n = new Scanner(System.in);
int num;
int ctr = 1;
System.out.print("Enter a number : ");
num = n.nextInt();
while(ctr <= num) {
if(num % ctr == 0) {
System.out.print(ctr + "\t");
}
ctr++;
}
System.out.println();
}
}
}
答案 0 :(得分:1)
嗯,关于你应该做什么,这有点模糊。
在实践中这样做的方法是使用像Rabin-Miller这样的概率算法,可以将其设置为以您喜欢的任何精确度给出正确的答案,并且比保证的确定性算法更有效。给出正确的答案。
但是,如果要编写确定性算法,可以通过尝试从2到sqrt(n)的所有可能因子来确定n是否为素数,并查看它们中的任何一个是否精确地划分为n。你的代码直到n,这是低效的。它还将决定所有值都是复合的,因为n总是精确到n。至少,你应该停在n-1。你还需要从2而不是1开始,因为1总是精确地进入n。
答案 1 :(得分:1)
你应该自己做这件事,但是在这里你没有最佳代码:
Scanner n = new Scanner(System.in);
int num;
int ctr=2;
boolean prime = true;
System.out.print("Enter a number : ");
num = n.nextInt();
while(ctr<num){
if(num%ctr==0){
prime = false
break;
}
ctr++;
}
if (prime) {
System.out.println("PRIME");
} else {
System.out.println("COMPOSITE");
}