java质数_Java中的质数-算法

我已经开始学习用Java编写代码,并决定使用Project Euler站点给我做一些小任务,以尝试并完成所学到的每一个新编码.所以我遇到了Problem 3:

13195的主要因子是5、7、13和29.

什么是600851475143的最大素数?

我考虑了这个问题,研究了许多关于质数的理论,以及如何通过各种不同的计算找到质数的方法(以Eratosthenes筛为例),我想到的解决方案是测试2的数字. n看看它们是否是质数,如果是,那么我将Tn变量(在这种情况下为600851475143)除以新发现的质数,看看它是否是一个因数.如果是这样,我将其分配给变量Hp(最高质数),并在程序结束时将Hp输出到控制台以给出结果.

这是我的代码:

public class Largest_Prime_Factor_NEW_SOLUTION {

static long Tn = 600851475143L;

static long Hp = 0;

static boolean isPrime = false;

public static void main(String[] args) {

for (long i=2; i

System.out.println("TESTING NUMBER " + i);

for (long k=2; k < i; k++) {

if (i % k == 0) {

System.out.println(i + " IS NOT A PRIME");

break;

} else if (k + 1 == i) {

isPrime = true;

}

}

if (isPrime) {

System.out.println(i + " IS A PRIME");

if (Tn % i == 0) {

System.out.println(Tn + " IS DIVISIBLE BY " + i);

Hp = i;

} else {

System.out.println(Tn + " IS NOT DIVISIBLE BY " + i);

}

}

isPrime = false;

}

System.out.println("THE HIGHEST PRIME NUMBER OF " + Tn + " IS " + Hp);

}

}

现在我知道该代码效率很低,从一开始我就设法从我开始的地方将其压缩(到处都是循环!),但是我要问的是,我该如何改进呢?它正在吞噬我,因为我研究的所有内容都与他人的行为相矛盾,这非常令人困惑.我尝试了sieve方法,但我知道布尔数组只能是int数组,而不能是long数组?

我了解,在开始编码时,我将限于可以使用的知识,但是出于兴趣,我渴望看到最终的解决方案.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值