再用C++写一个生成大素数的算法
时间: 2024-05-01 10:19:25 浏览: 184
好的,以下是一个用 C 语言写的生成大素数的算法:
```
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
int is_prime(long num) {
if (num <= 1) return 0;
if (num % 2 == 0 && num > 2) return 0;
for (long i = 3; i <= sqrt(num); i += 2) {
if (num % i == 0) return 0;
}
return 1;
}
long generate_prime(int num_bits) {
long lower_bound = (long) pow(2, num_bits - 1);
long upper_bound = (long) pow(2, num_bits);
long prime_found = 0;
while (!prime_found) {
long candidate = (rand() % (upper_bound - lower_bound)) + lower_bound;
if (is_prime(candidate)) {
prime_found = candidate;
}
}
return prime_found;
}
int main() {
srand(time(0));
int num_bits = 1024; // 此处可根据需求调整素数的位数
long prime = generate_prime(num_bits);
printf("生成的 %d 位素数为:%ld\n", num_bits, prime);
return 0;
}
```
该程序会生成一个指定位数的大素数,采用随机生成素数的方法,首先生成一个比较大的区间,然后在这个区间内随机选取一个数,判断是否为素数,如果是,则表示找到了一个大素数,否则需要继续随机选取并判断。这样反复循环,直到找到一个大素数为止。
阅读全文