我正在尝试输出前 100 个素数并不断收到错误消息:
应用程序:不是程序;期望一个可以应用于给定参数的过程:(#) arguments...:[none]
错误显示在我的 take$ 程序中:
(if (or (= m 0) (null? st))
'()
(cons (car st) (take$ (- m 1) ((cdr st)))))))
Run Code Online (Sandbox Code Playgroud)
这是我所有的代码:
(define int-builder$
(lambda (x)
(list x (lambda () (int-builder$ (+ 1 x ))))))
(define take$
(lambda (m st)
(if (or (= m 0) (null? st))
'()
(cons (car st) (take$ (- m 1) ((cdr st)))))))
(define filter-out-mults$
(lambda (num st)
(cond
(( = (remainder (car st) num) 0)
(filter-out-mults$ num ((cadr st))))
(else
(list …Run Code Online (Sandbox Code Playgroud) scheme primes sieve lazy-sequences non-procedure-application
#include <stdlib.h>
#include <stdio.h>
#include <stdbool.h>
#include <math.h>
bool isPrime(unsigned long long x) {
if (x % 2 == 0)
return false;
for (unsigned long long i = 3; i < sqrt(x); x += 2) {
if (x % i == 0)
return false;
}
return true;
}
int main(int argc, char const *argv[]) {
unsigned long long largest, number = 13195;
for (unsigned long long i = 2; i < number; i++) {
if (isPrime(i) && number % i …Run Code Online (Sandbox Code Playgroud) 我是时间复杂度分析的新手...
如果有人能告诉我这是否是二次的,我将不胜感激。而且如果有更简单的方法可以使它成为o(1)。
public class PrimeNumbers {
public boolean isPrime(int n) {
boolean retValue = true;
for (int i = 2; i < n; i++) {
if (n % 2 == 0) {
retValue = false;
}
}
return retValue;
}
}
Run Code Online (Sandbox Code Playgroud)
如果有人可以分解它为什么是这样,它肯定会帮助我学习。:)
非常感谢!
我想弄清楚的是,当我为较小的数字运行此代码时,它返回列表就好了,但对于较大的数字(我会在我正在处理的上下文中称其为小。)例如 29996299,它会运行很长时间,我已经等了 45 分钟没有结果,最终不得不终止程序。我想知道是否有更有效的方法来处理超过 4 位或 5 位数字的数字。我已经测试了 range 函数的一些排列,看看是否有更好的方法来处理我想要生成的列表的限制,但似乎没有对计算所需的时间产生任何影响。我是 python 的新手,作为程序员并不是那么有经验。感谢您的时间。
在提交这篇文章之前再次运行程序,花了一个半小时左右。
该程序的功能是取用户选择的数字,用它来生成一个下界,找到下界和输入之间的所有素数并附加到列表中,然后生成第二个上界并找到所有素数,然后附加到列表中,到创建一个从初始数字向前和向后延伸的列表。该程序按我的预期工作,但没有我需要的那么快,因为我要处理的数字会很快变大,每个阶段几乎翻倍。
initial_num = input("Please enter a number. ")
lower_1 = int(initial_num) - 1000
upper_1 = int(initial_num)
list_1 = []
for num in range(lower_1,upper_1):
if num > 1:
for i in range(2,num):
if (num % i) == 0:
break
else:
list_1.append(num)
lower_2 = list_1[-1]
upper_2 = list_1[-1] + 2000
list_2 = []
for num in range(lower_2,upper_2 +1):
if num > 1:
for i in range(2,num):
if (num % …Run Code Online (Sandbox Code Playgroud) 我有两种测试素数的方法.其中一个叫isPrime,另一个叫isBigPrime.我最初想要的是用我已经计算过的"小"素数来测试"大"素数,这样测试变得更快.这是我的实现:
intSqrt :: Integer -> Integer
intSqrt n = round $ sqrt $ fromIntegral n
isPrime' :: Integer->Integer -> Bool
isPrime' 1 m = False
isPrime' n m = do
if (m > (intSqrt n))
then True
else if (rem n (m+1) == 0)
then False
else do isPrime' n (m+1)
isPrime :: Integer -> Bool
isPrime 2 = True
isPrime 3 = True
isPrime n = isPrime' n 1
isBigPrime' :: Integer ->Int ->Bool
isBigPrime' …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 Python 快速确定一个数字是否为质数。
我有两个功能可以做到这一点。两者都返回 True 或 False。
函数 isPrime1 返回 False 的速度非常快,是一个数字不是素数。例如有一个大数字。但是对于大素数测试 True 的速度很慢。
函数 isPrime2 在为素数返回 True 时更快。但是如果一个数很大而且不是质数,那么返回一个值需要很长时间。第一个函数可以更好地工作。
我怎样才能想出一个解决方案,该解决方案可以快速为非质数的大数返回 False 并且可以快速处理质数的大数?
`
def isPrime1(number): #Works well with big numbers that are not prime
state = True
if number <= 0:
state = False
return state
else:
for i in range(2,number):
if number % i == 0:
state = False
break
return state
def isPrime2(number): #Works well with big numbers that are prime
d = 2
while d*d <= number: …Run Code Online (Sandbox Code Playgroud) 我正在尝试“找到第 10001 个素数”作为欧拉项目挑战的一部分,但我不知道为什么我的代码不起作用。当我测试我的 isPrime() 函数时,它成功地找到了一个数字是否是素数,但我的程序返回 10200 作为第 10001 个素数。为什么是这样?
这是我的代码:
using System;
using System.Collections.Generic;
namespace Challenge_7
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Solution to Project Euler");
Console.WriteLine("Challenge 7 - Find the 10001st prime");
Console.WriteLine("\nProject Start:");
List<int> primes = new List<int>();
int number = 1;
while (primes.Count != 10001)
{
if (isPrime(number))
{
primes.Add(number);
Console.WriteLine(number);
}
number++;
}
Console.WriteLine("The 10001st prime is: {0}", primes[10000]);
Console.ReadLine();
}
private static bool isPrime(int n)
{
bool prime = true;
for (int …Run Code Online (Sandbox Code Playgroud) 我最近看到一篇文章,声称它可以使用高效的埃拉托色尼筛法在 O(n) 中找到所有小于 n 的素数。但是我无法看到它是如何 O(n)。
https://www.geeksforgeeks.org/sieve-eratosthenes-0n-time-complexity/
有人可以帮忙吗?
在 Stroustrup 的编程:使用 C++ 的原则和实践,第 4 章,练习 13 中,我必须编写一个程序来使用 Erathostenes 筛法查找给定范围内的所有素数。
到目前为止,我想出了这个:
vector<int> values;
void initialize_values()
{
for (int i{0}; i < 100; ++i)
values.push_back(1);
}
void remove_composites(vector<int> values)
{
for(int i{2}; i * i < values.size(); ++i)
{
if (values[i] == 1)
{
for (int p{i + i}; p < values.size(); p += i)
values[p] = 0; //not working
}
}
}
int main()
{
initialize_values();
remove_composites(values);
for (int i{2}; i < values.size(); ++i)
{
if (values[i] …Run Code Online (Sandbox Code Playgroud) public class PrimeNumbers {
public static void main(String[] args) {
System.out.println(getPrimeNumbers(3, 10));
}
public static List<Integer> getPrimeNumbers(int lowerBound, int upperBound) {
List<Integer> numbers = new ArrayList<>();
for (int i = lowerBound; i <= upperBound; i++) {
for (int j = 2; j < upperBound; j++) {
if (i % j == 0) {
break;
} else {
numbers.add(i);
}
}
}
return numbers;
}
}
Run Code Online (Sandbox Code Playgroud)
这是到目前为止的代码,但质数不断重复,我需要帮助停止重复