所以我想找到关于欧拉计划的问题3的答案。我需要确定给定数的最大素数因子。
引述欧拉项目:“13195的素数因子是5、7、13和29。600851475143中最大的素数因子是什么?”
我已经构建了我的代码,它在任何int大小的东西上都能完美地工作。但是由于它们给出的巨大数字,我的代码存在转换问题。
起初,我尝试切换到长变量和长数组,但我得到了错误:“可能从long到int的有损转换”
那么,我如何才能让我的代码接受非常长的数字呢?
public class Test {
long[] delers;
public static void main(String[] args) {
Test test = new Test();
test.determineDividers(600851475143,determineNumberOfDividers(600851475143));
long a = test.determineHighestPrime(test.delers);
System.out.println(a);
}
public void determineDividers(long getal,long aantalDelers) {
delers= new long[aantalDelers];
long k = 0;
for (long i = 1; i < getal; i++) {
if (getal % i == 0) {
delers[k]=i;
k++;
}
}
}
public long determineNumberOfDividers(long getal) {
int k = 0;
for (long i = 1; i < getal; i++) {
if (getal % i == 0) {
k++;
}
}
return k;
}
public boolean determinePrime(long getal) {
for (long i = 2; i < getal; i++) {
if (getal % i == 0) {
return false;
}
}
return true;
}
public long determineHighestPrime(long[] deler) {
for (long i = deler.length - 1; i > 0; i--) {
if (determinePrime(deler[i]) == true) {
return deler[i]);
}
}
return 0;
}
}
谢谢你抽出时间
编辑1:添加了PE中的示例。
编辑2:添加的解决方案
public class Test {
long[] delers;
public static void main(String[] args) {
Test test = new Test();
test.determineDividers(600851475143L,test.determineNumberOfDividers(600851475143L));
long a = test.determineHighestPrime(test.delers);
System.out.println(a);
}
public void determineDividers(long getal,int aantalDelers) {
delers= new long[aantalDelers];
int k = 0;
for (long i = 1; i < getal; i++) {
if (getal % i == 0) {
System.out.println(i);
delers[k]=i;
k++;
}
}
}
public int determineNumberOfDividers(long getal) {
int k = 0;
for (long i = 1; i < getal; i++) {
if (getal % i == 0) {
k++;
}
}
return k;
}
public boolean determinePrime(long getal) {
for (long i = 2; i < getal; i++) {
if (getal % i == 0) {
return false;
}
}
return true;
}
public long determineHighestPrime(long[] deler) {
for (int i = deler.length - 1; i > 0; i--) {
if (determinePrime(deler[i]) == true) {
return deler[i];
}
}
return 0;
}
}
将所有将得到“巨人”的变量更改为BigInteger。您需要更新数学以使用函数调用而不是java操作数,但它们都可以在BigInteger中使用。
设置数组时,数组的大小必须是int
。因此,这:
delers= new long[aantalDelers];
无法编译,因为您已将参数a antaldelers声明为long。但是,当您调用确定标识符(determineDividers)时,为确定标识符(antaldelers)传入的值是确定标识符(determinediumberofdividers)的结果,您声明该值返回长,但该函数表示返回k,而k是int。
所以我认为您可以更改确定性NumberOfDividers
,使其返回int
而不是long
,并将aantalDelers
参数更改为int
而不是long
。这样您将避免任何long
-to-int
转换。此外,在使用k
和i
作为数组索引并将它们声明为long
的地方,这些也应该更改为int
。
恕我直言,我认为这是可行的,因为我认为一个263的数字不能有超过231的除数。但是,如果我的数学是错误的,并且它可以,那么除了数组之外,您还需要其他一些机制。(事实上,无论如何,您可能需要想出另一个算法;我感觉这个算法需要很长时间才能运行。)
所以我有一个问题,当我计算一个数字时,比如说15,我必须显示这个:15=3x5,但我得到的是3x5x5,我不知道如何使它变成这样,所以它只显示3x5。还有一个问题是,我输入的数字是否是素数。有办法解决这个问题吗?我只需要这些,然后再编辑其他东西。
我有一些用于Euler项目的代码。求最大素因子600851475143。这需要很长时间才能完成,至少需要30分钟。你们能看出来是因为我的代码太长了,还是我的代码错了。还有,有什么让运行时间更快的提示吗?
问题内容: 好的,我的问题不是如何确定数字是否为质数,因为我想我已经知道了,但是更多的是如何使其正确显示。 这是我的代码: 现在我的问题是,如果数字最终等于9,它会说它是质数,而不是。我认为问题在于中断在一个循环后就停止了它,因此它不会递增变量p,因此仅测试除以2(我认为)。但是,如果我删除断点,它将在每次通过时打印出“和不是素数”,直到退出循环为止。不知道该怎么办。 问题答案: 查找数字是否为素
当我在Linux上调用时,它返回。相同的代码适用于Windows,并且我安装了适当的图形驱动程序。如何确定它返回 null 的原因? 编辑:结果它返回了null,因为我要求的OpenGL版本显然在我的上网本上不可用。这解决了我的问题,但没有真正回答我的问题。
当你遇到问题时,首先要做的是找出导致问题的程序和设备部件: ·如果遇到下述征兆之一,或许是因为硬件问题(如内存、主板、CPU或硬盘)或内核问题: 1. 键盘不工作。正常情况下可通过按Caps Lock建进行检查。如果Caps Lock的点亮状态未改变,就需要更换键盘(在此之前,应尝试重启计算机,并检查与键盘相连的所有电缆)。 2. 鼠标指针不移动。 3. 机器未对远程机器的Ping命令做出应答。