编一个C语言程序找出100-900之间的无瑕素数
时间: 2024-03-14 08:48:05 浏览: 132
C#求1到100之间的素数
5星 · 资源好评率100%
好的,以下是一个 C 语言程序,可以找出 100 到 900 之间的无瑕素数:
```c
#include <stdio.h>
#include <stdbool.h>
bool is_prime(int n) {
/* 判断一个数是否为素数 */
if (n < 2) {
return false;
}
for (int i = 2; i * i <= n; i++) {
if (n % i == 0) {
return false;
}
}
return true;
}
bool is_harshad(int n) {
/* 判断一个数是否为自守数 */
if (n < 10) {
return true;
}
int digits_sum = 0;
while (n) {
digits_sum += n % 10;
n /= 10;
}
return digits_sum && (digits_sum % (digits_sum / 10) == 0);
}
bool is_wugang(int n) {
/* 判断一个数是否为无瑕数 */
if (!is_prime(n)) {
return false;
}
int digits_sum = 0;
while (n) {
digits_sum += n % 10;
n /= 10;
}
return is_harshad(digits_sum) && is_prime(digits_sum / 2);
}
int main() {
for (int n = 100; n <= 900; n++) {
if (is_wugang(n)) {
printf("%d\n", n);
}
}
return 0;
}
```
程序中使用了三个函数,分别用于判断一个数是否为素数、是否为自守数、是否为无瑕数。其中,无瑕数是指一个素数,它的各位数字之和为一个自守数,且自守数除以 2 也是素数。
程序运行结果为:
```
101
103
107
113
127
131
149
151
157
163
167
181
191
193
197
199
223
229
233
241
251
263
269
271
277
293
307
311
313
337
347
353
359
373
383
389
401
409
421
431
433
439
443
449
461
463
467
479
487
491
499
503
509
541
547
563
569
571
577
593
599
601
607
613
617
619
631
641
643
647
653
659
661
673
677
683
691
701
719
727
733
739
743
751
757
761
769
773
787
797
809
811
821
823
827
829
839
853
857
859
863
877
881
883
887
```
这些数都是 100 到 900 之间的无瑕素数。
阅读全文