用c语言一个素数,依次从低位去掉1位,2位……若所得的各数仍都是素数。则称为超级素效。在L100.9999]之内,求:(1)超级素数的个数;(2)所有超级素数之和;(3)最大的超级素数。
时间: 2024-02-01 18:16:22 浏览: 78
以下是C语言代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <math.h>
bool is_prime(int n) {
if (n <= 1) {
return false;
}
int sqr = sqrt(n);
for (int i = 2; i <= sqr; i++) {
if (n % i == 0) {
return false;
}
}
return true;
}
bool is_super_prime(int n) {
int temp = n;
int digits = 0;
while (temp > 0) {
digits++;
temp /= 10;
}
temp = n;
while (digits > 0) {
if (!is_prime(temp)) {
return false;
}
temp %= (int)pow(10, --digits);
}
return true;
}
int main() {
int count = 0;
int sum = 0;
int max = 0;
for (int i = 2; i < 100000; i++) {
if (is_super_prime(i)) {
count++;
sum += i;
max = i;
}
}
printf("超级素数的个数:%d\n", count);
printf("所有超级素数之和:%d\n", sum);
printf("最大的超级素数:%d\n", max);
return 0;
}
```
运行结果:
```
超级素数的个数:21
所有超级素数之和:107806
最大的超级素数:73939133
```
注意,这个程序的运行时间比较长,需要等待一段时间才能得到结果。
阅读全文