写一个计算100以内质数的C++程序
时间: 2023-04-12 14:00:41 浏览: 138
:
#include <stdio.h>
int main()
{
int i, j, flag;
printf("以下是100以内的质数:\n");
for(i=2; i<=100; i++)
{
flag = 0;
for(j=2; j<=i/2; j++)
{
if(i%j == 0)
{
flag = 1;
break;
}
}
if(flag == 0)
{
printf("%d ",i);
}
}
return 0;
}
相关问题
c++中计算1到100以内的质数和用whlie循环
在C++中,我们可以使用while循环和一些基本的数学原理来找出1到100之间的所有质数。质数是只有两个正因子(1和本身)的自然数。下面是一个简单的示例:
```cpp
#include <iostream>
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;
}
int main() {
int sum = 0;
int count = 0;
int num = 2; // 质数从2开始
while (num <= 100) {
if (isPrime(num)) {
std::cout << num << " ";
sum += num;
count++;
}
num++;
}
std::cout << "\nSum of prime numbers between 1 and 100: " << sum << "\n";
std::cout << "Number of prime numbers between 1 and 100: " << count << "\n";
return 0;
}
```
这个程序首先定义了一个辅助函数`isPrime()`用于检查一个数是否为质数。然后在主循环中,遍历2到100的所有整数,如果`isPrime()`返回`true`,就将其加到质数之和并增加计数。
编写程序在1S以内计算出十万亿以内的最大质数C++
编写一个能在1秒内找到十万亿范围内最大质数的C++程序可能会比较复杂,因为寻找大质数通常是一个计算密集型任务,需要高效的算法和数据结构。其中一个著名的算法是埃拉托斯特尼筛法(Sieve of Eratosthenes),但对于如此大的数字,更高效的是米勒-拉宾素性检验(Miller-Rabin Primality Test)配合一定的优化。
下面是一个简化的思路:
1. 使用位运算加速:对于每个数字n,我们只需要检查到√n,因为如果n不是质数,那么它必定有一个因数小于或等于它的平方根。
2. 使用并行计算:利用现代CPU的多个核心或GPU来并行检测一系列数字是否为质数,提高效率。
3. 利用已知的质数:从较小的质数开始,我们可以利用它们作为“种子”快速排除部分合数,而不是对每一个数字都从2开始检查。
以下是一个简单的示例代码框架(注意实际实现可能需要更复杂的优化):
```cpp
#include <iostream>
#include <vector>
#include <thread>
bool is_prime(int num, int max_threads) {
if (num <= 1) return false;
if (num <= 3) return true;
// 简化测试
if (num % 2 == 0 || num % 3 == 0) return false;
// 并行测试
std::vector<bool> primes(max_num / 2 + 1, true);
primes[0] = primes[1] = false;
const int step = num * sqrt(max_num) / max_threads;
for (int i = 6; i * i <= max_num; i += 6) {
int j = i + 2;
while (j <= max_num && primes[j]) {
primes[j] = false;
j += num;
}
}
for (int i = sqrt(num); i * i <= max_num; i += step) {
if (primes[i - 2] && (num % i == 0)) return false;
}
return true;
}
int main() {
const long long max_num = 1e+15; // 十万亿
int num = max_num;
int max_threads = std::thread::hardware_concurrency(); // 根据系统核心数
while (!is_prime(num, max_threads)) {
num--;
}
std::cout << "最大的质数是: " << num << std::endl;
阅读全文