欧拉项目的问题#3是:
13195的质因数是5、7、13、29。
600851475143的最大质因数是什么?
我的解决方案需要很长时间。我认为我得到了正确的实施;然而,当使用大数字进行测试时,我无法看到结果。它永远运行。我想知道我的算法是否有问题:
public class LargestPrimeFactor3 {
public static void main(String[] args) {
long start, end, totalTime;
long num = 600851475143L;
long pFactor = 0;
start = System.currentTimeMillis();
for(int i = 2; i < num; i++) {
if(isPrime(i)) {
if(num % i == 0) {
pFactor = i;
}
}
}
end = System.currentTimeMillis();
totalTime = end - start;
System.out.println(pFactor + " Time: "+totalTime);
}
static boolean isPrime(long n) {
for(int i = 2; i < n; i++) {
if(n % i == 0) {
return false;
}
}
return true;
}
}
public HashSet<Integer> distinctPrimeFactors(int n) //insane fast prime factor generator
{
HashSet<Integer> factors = new HashSet<Integer>();
int lastres = n;
if (n==1)
{
factors.add(1);
return factors;
}
while (true)
{
if (lastres==1)
break;
int c = 2;
while (true)
{
if (lastres%c==0)
break;
c++;
}
factors.add(c);
lastres/=c;
}
return factors;
}
如果您想为一个数快速生成不同的素数因子,请使用此方法,该方法可以在每次迭代时使该数变小。您可以将int更改为long,它应该适合您。
您应该在找到每个因子时将其划分出来。然后无需测试它们的质数,当我们按升序枚举可能的除数时(任何这样找到的除数都不能是复合的,它的因子已经被划分出来了)。然后您的代码变成:
class LargestPrimeFactor4 {
public static void main(String[] args) {
long start, end, totalTime;
long num = 600851475143L; // odd value is not divided by any even
long pFactor = 1L;
start = System.currentTimeMillis();
for(long i = 3L; i <= num / i; )
{
if( num % i == 0 ) {
pFactor = i;
num = num / i;
}
else {
i += 2;
}
}
if( pFactor < num ) { pFactor = num; }
end = System.currentTimeMillis();
totalTime = end - start;
System.out.println( pFactor + " Time: " + totalTime);
}
}
虽然不是用Java,但我认为您可能了解以下内容。基本上,只需测试奇数除数和一个数的平方根就可以减少迭代次数。这里有一种蛮力方法,可以在C#中立即产生结果。
static bool OddIsPrime (long oddvalue) // test an odd >= 3
{
// Only test odd divisors.
for (long i = 3; i <= Math.Sqrt(oddvalue); i += 2)
{
if (value % i == 0)
return false;
}
return true;
}
static void Main(string[] args)
{
long max = 600851475143; // an odd value
long maxFactor = 0;
// Only test odd divisors of MAX. Limit search to Square Root of MAX.
for (long i = 3; i <= Math.Sqrt(max); i += 2)
{
if (max % i == 0)
{
if (OddIsPrime(i)) // i is odd
{
maxFactor = i;
}
}
}
Console.WriteLine(maxFactor.ToString());
Console.ReadLine();
}
我是初学者。下面我对欧拉项目3号问题的解决方案需要很长时间才能返回答案。有人能提出改进建议吗?我做错了什么?我写了一些代码来帮助我思考这个问题的所有难题。 13195的质因数是5、7、13、29。 600851475143的最大质因数是什么?
问题内容: 我有一些关于永久使用Node.js的问题,可能很琐碎。根据我的阅读,永远可以通过编程使用,并且它维护了一个列表,其中包含所有永远使用的脚本。该进程终止后,它会自动产生一个新的进程,直到停止为止。 但是,我的问题是,如何永远做到这一点?是否还会添加这些脚本以在启动时启动? 问题答案: 您可以像这样永久性地使用程序: 在node.js脚本中使用Forever实例: 您应该花一点时间阅读一下
有什么让我怀念的吗?如果我必须手动关闭连接,是不是至少可以从Javers那里收到一个不再需要连接的通知?
我在weblogic 12c中配置了我的域。当我尝试启动服务器时,它们会出现(状态更改为正在运行),并且web服务处于活动状态。但是,weblogic控制台中最后一个操作的状态始终是“任务进行中” 未更改为已完成的可能原因是什么。 此外,在我重新启动管理后,它会变为无。
所以我在做一些应该很简单的事情,但显然不是在Spark SQL中。 null 表有外键字段,但数据库中没有定义显式fk关系。我在用Innodb。 Spark中的执行计划: 计划: ==物理计划==TungstenProject[Address_ID#0L]
问题内容: 我今天发现了一种不寻常的Java方法: 根据我所读过的有关Java传递变量(不管是否传递复杂对象)的行为的所有资料,该代码完全不起作用。所以…我在这里想念什么吗?是我身上遗失了一些微妙之处,还是这段代码属于thedailywtf? 问题答案: 正如Rytmis所说,Java按值传递引用。这意味着您可以合法地对方法的参数调用变异方法,但不能重新分配它们并期望值传播。 例: 编辑: 在这种