用 C++实现求 100 到 n 的素数和
时间: 2024-04-29 21:23:56 浏览: 81
```
#include <stdio.h>
int is_prime(int num) {
if (num < 2) {
return 0;
}
for (int i = 2; i * i <= num; i++) {
if (num % i == 0) {
return 0;
}
}
return 1;
}
int main() {
int n = 0;
printf("请输入一个大于100的整数: ");
scanf("%d", &n);
int sum = 0;
for (int i = 100; i <= n; i++) {
if (is_prime(i)) {
sum += i;
}
}
printf("100到%d之间的素数和为%d\n", n, sum);
return 0;
}
```
相关问题
用c++实现求小于N的所有素数,并将素数保存在一维数组中
在C++中,我们可以使用埃拉托斯特尼筛法(Sieve of Eratosthenes)来找到所有小于给定整数N的素数。这种方法通过逐个标记能被当前已知素数整除的数,最终剩下的未标记的就是素数。
以下是简单的C++代码实现:
```cpp
#include <iostream>
#include <vector>
// 判断是否为素数的辅助函数
bool isPrime(int num) {
if (num <= 1)
return false;
for (int i = 2; i * i <= num; ++i) {
if (num % i == 0)
return false;
}
return true;
}
// 寻找并存储所有小于N的素数
std::vector<int> findPrimes(int N) {
std::vector<bool> isComposite(N + 1, false);
std::vector<int> primes;
// 使用埃拉托斯特尼筛法
for (int i = 2; i * i <= N; ++i) {
// 如果i是素数
if (!isComposite[i]) {
primes.push_back(i);
// 标记i的所有倍数为合数
for (int j = i * i; j <= N; j += i)
isComposite[j] = true;
}
}
// 放入到一维数组中,如果N本身是素数,也添加
if (isPrime(N))
primes.push_back(N);
return primes;
}
int main() {
int N = 50; // 设置你要查找素数的上限
std::vector<int> primeArray = findPrimes(N);
for (const auto &prime : primeArray) {
std::cout << prime << " ";
}
std::cout << "\n";
return 0;
}
```
用c++实现第n小的质数
以下是使用C语言实现第n小的质数的示例代码:
```c
#include <stdio.h>
int isPrime(int num) {
int i;
for(i = 2; i <= num / 2; i++) {
if(num % i == 0) {
return 0;
}
}
return 1;
}
int main() {
int n, count = 0, num = 2;
printf("输入n:");
scanf("%d", &n);
while(count < n) {
if(isPrime(num) == 1) {
count++;
}
num++;
}
printf("第%d小的质数为%d\n", n, num - 1);
return 0;
}
```
上述代码中,`isPrime`函数用于判断一个数是否为质数。我们使用一个`count`变量来记录已经找到的质数个数,用`num`变量记录当前数字,初始值为2(因为2是最小的质数)。每次循环时,如果`isPrime(num)`返回1,说明`num`是一个质数,将`count`加1。当`count`等于输入的`n`时,输出当前数字`num-1`即可。
需要注意的是,当输入较大的数时,程序的执行速度可能较慢。可以考虑一些优化方法来加快程序的执行速度,例如使用更高效的质数判断算法、添加 break 语句减少循环次数等。
阅读全文