- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我在下面编写了以下代码来查找第 n 个素数。这在时间复杂度上可以提高吗?
描述:
ArrayList arr 存储计算出的素数。一旦 arr 达到大小 'n',循环退出,我们检索 ArrayList 中的第 n 个元素。在计算素数之前先将数字 2 和 3 相加,并检查从 4 开始的每个数字是否为素数。
public void calcPrime(int inp) {
ArrayList<Integer> arr = new ArrayList<Integer>(); // stores prime numbers
// calculated so far
// add prime numbers 2 and 3 to prime array 'arr'
arr.add(2);
arr.add(3);
// check if number is prime starting from 4
int counter = 4;
// check if arr's size has reached inp which is 'n', if so terminate while loop
while(arr.size() <= inp) {
// dont check for prime if number is divisible by 2
if(counter % 2 != 0) {
// check if current number 'counter' is perfectly divisible from
// counter/2 to 3
int temp = counter/2;
while(temp >=3) {
if(counter % temp == 0)
break;
temp --;
}
if(temp <= 3) {
arr.add(counter);
}
}
counter++;
}
System.out.println("finish" +arr.get(inp));
}
}
最佳答案
是的。
你的算法进行了 O(n^2) 操作(也许我不准确,但看起来是这样),其中 n 是结果。
有http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes采用 O(ipn* log(log(n))) 的算法。您只能在其中进行 inp 步,并假设 n = 2ipn*ln(ipn)。n 应该大于 ipn-素数。(我们知道素数的分布 http://en.wikipedia.org/wiki/Prime_number_theorem )
无论如何,您可以改进现有的解决方案:
public void calcPrime(int inp) {
ArrayList<Integer> arr = new ArrayList<Integer>();
arr.add(2);
arr.add(3);
int counter = 4;
while(arr.size() < inp) {
if(counter % 2 != 0 && counter%3 != 0) {
int temp = 4;
while(temp*temp <= counter) {
if(counter % temp == 0)
break;
temp ++;
}
if(temp*temp > counter) {
arr.add(counter);
}
}
counter++;
}
System.out.println("finish" +arr.get(inp-1));
}
}
关于java - 找到第 n 个质数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14742509/
我知道这不是寻找素数的最佳方法,也不是最有效的方法;但是,我似乎无法找到 169 算作素数的原因(就我而言,对于较小的数字,它可以正常工作)。 public static int checkPrime
有人可以指导我获取素数吗?这是家庭作业,所以我不想要答案,但一些指示将不胜感激。这真的让我很烦:( 我想我很接近。但是我遇到的问题是数字 25 和 35。它们不是质数,但是这个函数正在返回它们 var
利用正则判别素数,来源于网络,神人! 复制代码 代码如下: Set regex = New RegExp regex.Pattern = "^1?$&b
质数又称素数。一个大于1的自然数,如果除了1和它自身外,不能被其他自然数整除的数;否则称为合数。根据算术基本定理,每一个比1大的整数,要么本身是一个质数,要么可以写成一系列质数的乘积;而且如果不考虑
我在 Ruby on Rails 中尝试如何找到质数。这是我的代码: 助手:app/helpers/test_helper.rb module TestHelper
lower = int(input("from:")) upper = int(input("to:")) for num in range(lower,upper + 1): if num >
最近我对 LINQ 很感兴趣。我正在尝试获取质数。我实际上做得很好,但我的代码没有显示低于 Sqrt(n) 的素数。 static void Main(string[] args) {
在尝试设计算法时,我偶然发现了这个问题。这不是家庭作业。 令 P_i = 前 i 个素数的数组。现在我需要最小的 i 这样 Sum 1 / (P_i[n]*P_i[n]) >= 1. (如果这样的
本文已收录到 AndroidFamily ,技术和职场问题,请关注公众号 [彭旭锐] 提问。 大家好,我是小彭。 上周跟大家讲到小彭文章风格的问题,和一些朋友聊过以后,
我是新来的。我正在尝试解决此练习 Problem 18只是为了加强我的解决能力。我已经编码了答案。该任务要求“在 1,000,000 以下的质数中,有多少个数位之和等于两周中的天数?” (两周是 14
我是一名优秀的程序员,十分优秀!