【发布时间】:2021-07-16 03:44:22
【问题描述】:
我需要一些帮助来优化这个程序。我试图找出输入的最大主要因素。但是,它偶尔会出现超时问题,所以我有兴趣弄清楚如何优化它。
import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;
public class PFactor() {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int t = in.nextInt();
for(int a0 = 0; a0 < t; a0++){
long n = in.nextLong();
System.out.println(pMod(n));
}
}
public static int pMod(long d) {
long maxVal = 0;
for (long i = 2; i <= d; i++) {
if (d % i == 0) {
boolean prime = pCount(i);
if (prime == true) {
max = i;
}
} else {
max = max;
}
}
return (int)max;
}
public static boolean pCount(long inLong) {
int count = 0;
for (long s = 1; s <= inLong; s++) {
if (inLong % s == 0) {
count++;
}
}
if (count == 2) {
return true;
} else {
return false;
}
}
}
您知道如何优化此代码以减少超时吗?我需要尽快为工作中的某些事情做好准备,所以我决定伸出手来看看我是否可以得到一些帮助,因为我自己似乎无法弄清楚需要进一步优化的地方。
【问题讨论】:
-
对不起我的一些语法问题。英语不是我的母语,我无能为力。
-
您可以先不重新计算每个值是否每次都为素数,只测试奇数除数,然后除掉已知因素,以便您可以更快地退出。
-
我是怎么做到的?你能发布你会做的修改,以便我明白你的意思吗?
-
首先实现sieve
-
我是一个视觉学习者,所以我通常需要你发布原始代码的编辑版本,以便我可以看到它的实际效果。
标签: java optimization timeout prime-factoring