我正在制作一个 python 程序,该程序将生成一个数字的素数之和,但该程序没有给出正确的结果,请告诉我原因。
b=1
#generates a list of numbers.
while b<100:
b=b+1
x = 0.0
a = 0
d = 0
#generates a list of numbers less than b.
while x<b:
x=x+1
#this will check for divisors.
if (b/x)-int(b/x) == 0.0:
a=a+1
if a==2:
#if it finds a prime it will add it.
d=d+b
print d
Run Code Online (Sandbox Code Playgroud)
我让它成功生成了一个素数列表,但我无法添加素数。
这是我用来生成素数列表的代码。
b=1
while b<1000:
b=b+1
n = b
x = 0.0
a = 0
while x<n:
x=x+1
if (n/x)-int(n/x) == 0.0:
a=a+1
if …Run Code Online (Sandbox Code Playgroud) 我正在开发一个程序,在long根据我的算法应用一些计算后,我计算了多种类型。现在,我必须找到我生成的这个数字的相对素数。我怎样才能做到这一点?我知道如果两个数字是相对质数,那么他们的GCD == 1但在这种情况下我没有另一个数字。我的程序中只有一个生成的数字,我需要为这个数字计算一个相对质数。
编辑
产生相对素数的条件是:
1 < relative prime < generated Number
任何帮助表示赞赏。
我知道我可以使用以下primes函数找到小于或等于25的素数:
p = primes(25)
p=2 3 5 7 11 13 17 19 23
Run Code Online (Sandbox Code Playgroud)
但是我怎样才能找到不是素数的数字呢?
我试图在用户输入的数字之后找到下一个质数。
这是我到目前为止的代码:
public int Calculation(int number)
{
//set the isPrime to false
bool isPrime = false;
//do this while isPrime is still false
do
{
//increment the number by 1 each time
number = number + 1;
int squaredNumber = (int)Math.Sqrt(number);
//start at 2 and increment by 1 until it gets to the squared number
for (int i = 2; i <= squaredNumber; i++)
{
//how do I check all i's?
if (number % i != 0)
{
isPrime = …Run Code Online (Sandbox Code Playgroud) 我试图解决Haskell中的Euler问题3,它涉及找到数字的最大素数因子.我的代码运行了很长时间,似乎挂了.是什么导致我的代码如此低效?
primes = sieve (2:[3,5..])
where sieve (x:xs) = x:[y | y <- (sieve xs), mod y x /= 0]
sieve [] = []
primefactors n = filter (\x -> mod n x == 0) (primesUnder n)
where primesUnder z = reverse (takeWhile (< z) primes)
solve3 = head (primefactors 600851475143)
Run Code Online (Sandbox Code Playgroud) 我有这个功能:
generatePrimes :: Integral a => a -> [a]
generatePrimes n = [i | i <- [2..], isPrime i]
Run Code Online (Sandbox Code Playgroud)
我正在尝试获得前n 个素数。我知道我可以main通过使用take函数来调用函数(并获取列表的前n 个元素),但是我希望能够在函数达到n 个素数时停止(在函数内部),这样当它被称为main:
generatePrimes 8
Run Code Online (Sandbox Code Playgroud)
它将显示一个只有前 8 个素数的列表。
在一次采访中,我被问到了以下问题:
Write a function to print first n prime numbers
Run Code Online (Sandbox Code Playgroud)
该函数如下所示:
while (true) {
boolean isPrime = true;
for (int divisor = 2; divisor <= (int)(Math.sqrt(number)); divisor++) {
if (number % divisor == 0) {
isPrime = false;
break;
}
}
number++;
if(isPrime) {
System.out.print(number + " ");
primes++;
}
if (primes == n)
break;
}
Run Code Online (Sandbox Code Playgroud)
一个简单的复杂性分析可能会导致O(n?n)
但是面试官说,outerloop 不会仅仅n因为例如找到前 100 个质数,我们需要循环到 541(即第 100 个质数)
那么我们如何表达给定的时间复杂度呢?
问题陈述是要在20秒钟内找到20亿以下的质数。我遵循以下方法。
将数字n除以数字k的列表(k <sqrt(n)) -花费了20秒
将数字n除以sqrt(n)以下的质数列表。在这种情况下,我将质数存储在std :: list中-花费了超过180秒的时间
有人可以帮助我理解为什么即使我们将除数都减少了50%(大约),第二种方法仍要花很长时间?还是我选择了错误的数据结构?
方法1:
#include <iostream>
#include<list>
#include <ctime>
using namespace std;
list<long long> primeno;
void ListPrimeNumber();
int main()
{
clock_t time_req = clock();
ListPrimeNumber();
time_req = clock() - time_req;
cout << "time taken " << static_cast<float>(time_req) / CLOCKS_PER_SEC << " seconds" << endl;
return 0;
}
void check_prime(int i);
void ListPrimeNumber()
{
primeno.push_back(2);
primeno.push_back(3);
primeno.push_back(5);
for (long long i = 6; i <= 20000000; i++)
{
check_prime(i);
}
}
void check_prime(int …Run Code Online (Sandbox Code Playgroud) class Primes
def initialize
@primes = []
end
def prime_iterative(n)
i = 2
while @primes.size < n do
@primes << i if is_prime?(i)
i += 1
end
@primes
end
def is_prime?(n)
@primes.each { |prime| return false if n % prime == 0 }
true
end
end
primes = Primes. new
puts primes.prime_iterative 10
Run Code Online (Sandbox Code Playgroud)
它发现 n 个素数并不是所有小于 n 的素数。我无法确定上限
给定一个数n和整数k,检查 k 个素数的和是否为n。
input 13 2
output: yes
explanation: 11+2 equals 13
Run Code Online (Sandbox Code Playgroud)
由于 k 被假定为任何一般整数,我不知道如何解决它。我想通过创建所有质数的集合并寻找 k 数来解决它,但即使 k 小到 5,我们也必须运行 4 到 5 次循环才能做到这一点。如何解决此类问题,请寻求帮助,谢谢。我尝试初始代码为:
#include<iostream>
#include<unordered_set>
#include<vector>
using namespace std;
bool is_prime(int n){
bool flag =true;
for(int i=2;i<n;i++){
if(n%i==0 && n!=i){
flag=false;
break;
}
}
if(flag){
return true;
}
return false;
}
int main(){
int n;cin>>n;
int k;cin>>k;
unordered_set<int>s;
for(int i=2;i<n;i++){
if(is_prime(i)){
s.insert(i);
}
}
}
Run Code Online (Sandbox Code Playgroud)