我正在尝试编写一个简单的筛子函数来计算clojure中的素数.我已经看到了这个关于编写高效的筛分功能的问题,但我不是为了那点呢.现在我只想写一个非常简单(缓慢)的筛子.以下是我的想法:
(defn sieve [potentials primes]
(if-let [p (first potentials)]
(recur (filter #(not= (mod % p) 0) potentials) (conj primes p))
primes))
Run Code Online (Sandbox Code Playgroud)
对于小范围,它工作正常,但导致堆栈溢出大范围:
user=> (sieve (range 2 30) [])
[2 3 5 7 11 13 17 19 23 29]
user=> (sieve (range 2 15000) [])
java.lang.StackOverflowError (NO_SOURCE_FILE:0)
Run Code Online (Sandbox Code Playgroud)
我认为通过使用recur
这将是一个非堆栈消耗循环结构?我错过了什么?
我正在尝试计算素数,我已经完成了.但我想计算并打印第n个素数(用户输入),在计算其余部分(它们不会被打印)时,只打印第n个素数.
这是我到目前为止所写的内容:
import java.util.Scanner;
/**
* Calculates the nth prime number
* @author {Zyst}
*/
public class Prime {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int n,
i = 2,
x = 2;
System.out.printf("This program calculates the nth Prime number\n");
System.out.printf("Please enter the nth prime number you want to find: ");
n = input.nextInt();
for(i = 2, x = 2; i <= n; i++) {
for(x = 2; x < i; x++) {
if(i % …
Run Code Online (Sandbox Code Playgroud) 如何找到大于给定数字的最小素数?例如,给定4,我需要5; 给出7,我需要11.
我想知道有关最佳算法的一些想法.我想到的一种方法是通过Eratosthenes筛子生成素数,然后在给定数字后找到素数.
当我正在玩一个快速的教程时,我开始编写一个自定义isPrime
方法来检查给定Int
是否为素数.
在写完之后,我意识到它工作正常,但发现它isPrime
在某些相当大的数字上执行有点慢(当时仍然低得多Int.max
).
所以我在objc中编写了相同的代码片段,代码执行得更快(66倍).
这是快速代码:
class Swift {
class func isPrime(n:Int) -> Bool {
let sqr : Int = Int(sqrt(Double(n))) + 1
for i in 2...sqr {
if n % i == 0 {
return false
}
}
return true;
}
class func primesInRange(start:Int, end:Int) -> Int[] {
var primes:Int[] = Int[]()
for n in start...end {
if self.isPrime(n) {
primes.append(n)
}
}
return primes;
}
}
Run Code Online (Sandbox Code Playgroud)
和objc代码:
@implementation Utils
+ …
Run Code Online (Sandbox Code Playgroud) 我需要在非常大的数字(在很长的范围内)之间的间隔上测试素数,所以我需要一些快速算法来检查数字是否为素数.请提出您的想法.
请问有人请告诉我这段代码我做错了什么?无论如何,它只是打印'计数'.我只想要一个非常简单的素数发生器(没什么特别的).
import math
def main():
count = 3
one = 1
while one == 1:
for x in range(2, int(math.sqrt(count) + 1)):
if count % x == 0:
continue
if count % x != 0:
print count
count += 1
Run Code Online (Sandbox Code Playgroud) 我想找到介于0和长变量之间的素数,但我无法获得任何输出.
该计划是
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication16
{
class Program
{
void prime_num(long num)
{
bool isPrime = true;
for (int i = 0; i <= num; i++)
{
for (int j = 2; j <= num; j++)
{
if (i != j && i % j == 0)
{
isPrime = false;
break;
}
}
if (isPrime)
{
Console.WriteLine ( "Prime:" + i );
}
isPrime = true;
}
}
static void Main(string[] args) …
Run Code Online (Sandbox Code Playgroud) 我一直试图通过Project Euler工作,并注意到一些问题要求你确定一个素数作为其中的一部分.
我知道我可以将x除以2,3,4,5,...,X的平方根,如果我到达平方根,我可以(安全地)假设该数字是素数.不幸的是,这个解决方案似乎非常笨重.
我已经研究了如何确定数字是否为素数的更好的算法,但是快速混淆.
是否有一个简单的算法可以确定X是否是素数,而不是混淆一个凡人的程序员?
非常感谢!
我一直试图编写一个程序,它将采用一个输入的数字,并检查它是否是素数.到目前为止,我所做的代码完全可以正常工作,如果这个数字实际上是素数.如果数字不是素数,那就很奇怪了.我想知道是否有人能告诉我代码的问题.
a=2
num=13
while num > a :
if num%a==0 & a!=num:
print('not prime')
a=a+1
else:
print('prime')
a=(num)+1
Run Code Online (Sandbox Code Playgroud)
当24被输入时给出的结果是:不是素数不是素数而不是素数
我如何修复每个偶数的每个奇数而不是素数的报告素数的错误