C++如何实现输入一个数,输出比他小的所有质数?
要求:时间不能超过1秒!
自己会写啦
不知道你这个问题是否已经解决, 如果还没有解决的话:要实现输入一个数并输出比它小的所有质数,可以使用以下方法:
这是一个非常简单的方法。然而,如果输入的数比较大,例如10^6级别以上,使用此方法可能会耗费很长时间。因此,我们可以使用一些优化方法来提高速度。
首先,我们可以使用一个数组来存储已经找到的质数。初始时,设置一个长度为n的布尔数组,全部置为true。然后从2开始循环遍历,如果该数是质数,则将它的所有倍数标记为非质数。这样最后留下的true值对应的索引就是所有的质数。
下面是对应的C ++代码实现:
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
vector<int> findPrimes(int n) {
vector<bool> isPrime(n + 1, true);
vector<int> primes;
for (int i = 2; i <= sqrt(n); i++) {
if (isPrime[i]) {
for (int j = i * i; j <= n; j += i) {
isPrime[j] = false;
}
}
}
for (int i = 2; i <= n; i++) {
if (isPrime[i]) {
primes.push_back(i);
}
}
return primes;
}
int main() {
int n;
cout << "请输入一个正整数n:";
cin >> n;
vector<int> primes = findPrimes(n);
cout << "比 " << n << " 小的所有质数是:";
for (int prime : primes) {
cout << prime << " ";
}
return 0;
}
在这个实现中,我们首先定义了一个函数findPrimes(int n)
,该函数接收一个整数n作为输入,返回比n小的所有质数。函数内部使用两个循环,分别进行质数筛选和输出。
在主函数中,我们首先接收用户输入的数n,然后调用findPrimes(n)
函数来获取比n小的所有质数,并输出。
这种实现方式可以在1秒内完成任务,即使n很大也不会有太大的性能问题。
请注意,以上代码仅为示例代码,未进行错误处理和输入验证,请根据实际情况进行完善。