我有一项任务,这里是要求
Write a program that finds the number of the prime numbers in a randomly
generated row.
No more than 100 examples are set to the standard input. Each
example is defined by two positive integers s and N per row (s <10^3, N <10^9).
s sets a numerical row (by srand (s)) of length N, which is generated with
rand ()% 1000.
Print out the count of all prime numbers.
我目前将此作为我的代码,在我的PC上,最大值需要3秒才能找到数字行中所有素数的计数。
#include <iostream>
#include <stdlib.h>
#include <algorithm>
#include <vector>
#include <stdio.h>
using namespace std;
bool isPrime(int num) {
if (num <= 3) {
return num > 1;
} else if (num % 2 == 0 || num % 3 == 0) {
return false;
} else {
for (int i = 5; i * i <= num; i += 6) {
if (num % i == 0 || num % (i + 2) == 0) {
return false;
}
}
return true;
}
}
int main()
{
int seed;
long long lenght;
while(cin >> seed >> lenght){
srand(seed);
unsigned long long totalPrimes = 0;
for (int i = 0; i < lenght; ++i) {
int prime = rand() % 1000;
if (isPrime(prime)) {
totalPrimes++;
}
}
cout << totalPrimes << endl;
int seed = 0;
int lenght = 0;
}
return 0;
}
问题是这似乎不够快,因为他想要它。有更快的方法吗?我尝试了很多东西,而且速度都慢于上面的代码。
答案 0 :(得分:0)
您可以进行算法改进
“所有编程都是缓存练习。” -Terje Mathisen
那么为什么不止一次计算素数,只需存储它们,看看生成的随机数是否是其中之一,可以通过线性搜索或二元搜索。
如果您遍历所有数字以查找素数并将其存储在索引数组中,那么您可以在O(1)而不是O(log N)中进行查找
if (primeList[x])
totalPrimes++;