我试图在一定范围内打印出素数,并决定与Eratosthenes的分段筛子一起,找到从2到sqrt(n)的素数,并使用列表中找到的素数从任何范围打印出素数,这样范围内的数字不能被筛子列表中的任何一个数除以,最后是素数。
我的代码适用于小范围,如从2到10和3到5,但开始打印出副本和大n的非素数。有什么帮助吗?
from math import sqrt, ceil
#Creating segmented sieve
start=2
stop=1000000000
sieve=[i for i in range(2,ceil(sqrt(stop)+1))]
我试图找出我能得到多少素数,直到最大2的乘积在Long.MAX_VALUE上为止。
它需要超过半个小时(和GBs的RAM)
public class Main {
public static void main(String[] args) {
ArrayList <Long> primes= new ArrayList<Long>();
primes.add(2L);
long i=3L;
// Looping from 3, to the limit
while (primes.
我正在尝试用scala解决SPOJ中的问题(素数生成器)。但这让我想起了“时间有限”。有人知道这是为什么吗?
以下是我的代码。
var testCaseNumber = readInt()
for (index <- 1 to testCaseNumber) {
val range: Array[String] = readLine().split(" ")
(math.max(range(0).toInt, 2) to range(1).toInt).filter(num => {
var flag = true
for (elemen
所以我花了一整晚的时间来组装这个基于埃拉托色尼筛子的质数生成器。代码如下:
n = input("What number do you want to calculate to? ")
import time
start = time.time()
def pr(l):
ln = l+1
p = range(2, ln)
for k in p:
f = range(k, ln, k)
for f in f[1:]:
if f in p:
p.remove(f)
return p
print pr(n)
end
我们被指派制作一个java程序,该程序与Eratosthenes算法的筛网并行。我已经用我所知道的每一种方式试过几次,但都没有成功。Im应该使用素数小于所计算的数的填充数组。这是我的代码,有人能帮我重新检查程序和/或找出为什么我要得到这个错误吗?任何帮助都是非常感谢的。
import java.text.DecimalFormat;
import java.util.Scanner;
import java.util.Arrays;
public class Lab6st
{
static int MAX = 100;
static int i;
static int k;
stati
这是一个素数生成器类,松散地基于Eratosthenes的筛子。它应该产生相当数量的素数(即百万)。
static class PrimesGenerator
{
private const int StartFrom = 2;
public static IEnumerable<int> GetPrimes()
{
var number = StartFrom;
var dividers = new List<int>();
while (true)
{
这个程序求一个数的素因数的复杂度是多少?有什么方法可以改善它(只考虑时间复杂度,而不考虑编码标准或空间复杂度)。 谢谢并致以问候。 请参阅源代码: function primes(n) {
let primeNumbers = [2];
if (n < 2) {
return [];
} else if (n == 2) {
return [2];
}
for (let i = 3; i <= n; i++) {
let x = i;
let j = 0;
let isPrime = true;
whil
最近,我读了一些关于素数的文章,并决定编写自己的程序来寻找素数(不是为了学校或任何事情,只是出于爱好)。代码如下:
import time
a=[2,3]
e=[0,1,1,1,0,1]
b=0
c=0
d=[]
length=int(input("primes til n?"))
tijd=time.time()
while 1:
d=[]
b=(e.index(0,a[-1])+1)
a.append(b)
if len(e)<length:
e.extend(e*(b-1))
e[(b-1)]=1
if ((b
我目前正在开发一个程序,该程序使用PCSPIM在MIPS汇编中使用递归计算最多200个素数。到目前为止,我已经成功地填充了一个从1到200的数字数组和一个由所有1组成的二进制向量列表。我正在苦苦思索的概念是如何使用堆栈框架来帮助这个过程。
下面是我为堆栈帧准备的内容:
subu $sp,$sp,32 # Set up the stack frame
sw $ra, 28($sp) # save $ra register to the stack
sw $fp, 24($sp) # save $fp register to the stack
a
为了澄清,这与这个问题Sieve of Eratosthenes - Finding Primes Python不同,因为我不想在两个数字之间生成质数,但我想检查一个数字是否是质数。 我编写了以下代码来确定一个数字是否为质数。然后我听说了Eratosthenes算法的筛子,它显然更快,但我不知道如何在下面的代码中编写它? number1 = int(raw_input("""
Enter any number :- """))
if number1 == 1:
print "1 is a special case. It is
我的程序使用了大量的内存和处理能力,我只能搜索到6000,有什么方法可以减少使用的内存量?这将对未来的编程工作非常有帮助,因为知道如何巧妙地使用内存将是一件很好的事情。
ArrayList<Integer> factor = new ArrayList<Integer>();
ArrayList<Integer> non = new ArrayList<Integer>();
ArrayList<Integer> prime = new ArrayList<Integer>();
Scan
设pi(x)表示素数<= x。例如,pi(100) = 25。我想要创建一个表来存储所有pi(x)的值。我想最快的办法就是用埃拉托斯提尼的筛子。首先标记所有素数,然后使用动态规划,对素数进行求和,每次出现新素数时都会增加。这是在以下Java代码中实现的:
public static int [] piTableSimple (int L)
{
int sqrtl = (int) Math.sqrt(L);
int [] piTable = new int [L + 1];
Arrays.fill(piTable, 1);
我已经在c++中实现了Eratosthenes的筛子,但是代码在输入大于10^10的时候崩溃了。编译器显示信号11(SIGSEV)。因为全局数组bool a[5000000000000000];.To校验奇数高达10^16,我把数组大小取为(10^16)/2 =5* 10^15。如何减少空间?有一个问题的答案,我尝试了相应的,但我的程序crashes.Could任何人提供实现细节来解决它?
#include <bits/stdc++.h>
using namespace std;
long long unsigned n,sqN;
bool a[5000000000000000]
我试图编码一个素数查找器,它在两个给定的值之间打印素数。我对传统的筛子编码没有问题,但是当它被分段时,我的蟒蛇知识就会变得很缺乏。以下是我迄今所做的工作:
def primes(n): # traditional sieve finding primes up to sqrt(n)
myPrimeList= []
mySieve= array('B', [True]) * (int(n**0.5)+1)
for i in range(2,int((n**0.5)+1)):
if mySieve[i]:
myPrim
我的任务是生成一个包含所有质数到12位数的数组。
我尝试通过首先创建一个函数enumerate来模拟,该函数生成一个包含从2到num的每个整数的数组
var enumerate = function(num) {
array = [];
for (var i = 2; i <= num; i++) {
array.push(i);
}
return array;
};
然后我做了一个函数leaveOnlyPrimes,它遍历并从数组中删除每个数组成员的倍数,直到1/2 max (这不会是每个整数,因为每次迭代数组都会变小):
var lea
用Python编写素数函数的更有效的方法是什么?下面是我学习Python时的版本:
def print_prime(max):
i = 1
while i < max:
is_odd = True
for nd in range(2, i):
if nd < i and i % nd == 0:
is_odd = False
break
if(is_odd):
print(i)
i += 1
print_prime(100)
我正在尝试实现一种在给定范围内生成随机素数的方法。
我试着用一种简单的方法来判断一个数字是否是素数,高级的简单方法,Wilson的方法和我的方法,只要我基于这个算法的代码比以前所有的方法都快,我就能找到一个数是否是素数。
虽然效率是令人满意的,但我知道有一个实现可以在不创建数组的情况下工作,并且代码运行得更快,但是我不知道如何做到这一点,所以我的问题是显而易见的。
import acm.program.*;
import acm.util.RandomGenerator;
public class exercise4 extends Program {
public int nextPrim
我很难为Eratosthenes的筛子优化我的代码。该代码对于较小的数字(最多可达10,000)很好,但要运行超过100,000的数字需要很长时间。
import java.util.Arrays;
import java.util.Scanner;
public class SieveOfErasthostenes {
static int num = 1;
static int count = 0;
int i;
static int nthPrime;
public static void main(String[] args) {
我正在解决一个需要找到一个数的最大素因数的项目欧拉问题,我使用了c++来解决这个问题。然而,当我使用代码来获得大数的最大素因数(11位甚至更准确地说)时,这个问题需要超过3分钟才能得到最终答案,是什么让我的代码如此缓慢? 代码: #include <iostream>
using namespace std;
#include <cmath>
main()
{
long long n, i, maxf=1;
for (n=1; n<600851475143 ; n++)
{
bool test=true;
if (60085
我用python编写了两个原始性测试。第一种是基于审判分工,第二种是使用埃拉托斯提尼的筛子。我的理解是,筛子的时间复杂度应该比试用期小,所以筛子应该更快。
然而,当我运行它时,审判部门要快得多。例如,当n = 6*(10**11)时,is_prime(n)所花费的时间不到1秒钟,但是is_prime_sieve(n)实际上永远不会结束!我把筛子写错了吗?
我的代码是:
# determines if prime using trial division
def is_prime(n):
d = {}
u = math.floor(math.sqrt(n))
i = 2
实际上,我已经编写了我的第n项函数,它接受n并编译列表“素数”中的所有素数,并返回索引的位置- -1的素数是10001素数:如果有人可以改进我的代码或为这个问题编写更好的代码,请允许我这样做。
def nthprime(n):
primes = [2]
attempt = 3
while len(primes) < n: # it runs until the len of primes is greater or equal to n
if all(attempt % prime != 0 for prime in primes):