#include<stdio.h>
void main() {
int num1, num2, num3, fac1 = 0, fac2 = 0, fac3 = 0, i;
clrscr();
for (num1 = 5; num1 < 100; num1 = num1 + 1) {
for (i = 1; i <= num1; i++) {
if (num1 % i == 0) {
fac1 = fac1 + 1;
}
}
num2 = num1 - 2;
for (i = 1; i <= num2; i++) {
if (num2 % i == 0) {
fac2 = fac2 + 1;
}
}
num3 = num1 + 2;
for (i = 1; i <= num3; i++) {
if (num3 % i == 0) {
fac3 = fac3 + 1;
}
}
if (fac1 <= 2 && fac2 <= 2) {
printf("%d and %d are twin prime numbers\n", num1, num2);
}
if (fac1 <= 2 && fac3 <= 2) {
printf("%d and %d are twin prime numbers\n", num1, num3);
}
}
getch();
}
我们的目标是在这种情况下将双素数最多打印到一定数量的100,但是当我从5开始时,我只会得到此输出5和3是双素数5和7是双素数
在num1循环的每次迭代中,应清除fac1..3。一旦fac1达到2,if子句将不再满足。
您的代码还显示出很大的优化空间:所有偶数都不是命中候选字。如果以num1 = 5运行代码,则将同时测试num1-2和num1 + 2。稍后使用num1 = 7再次测试5对。
这是我的代码,带有单独的主测试程序:
#include <stdio.h>
bool IsPrime(int num)
{
int i;
for (i = 3; i < num; i+=2)
if (num % i == 0) return false;
return true;
}
void main()
{
int num;
clrscr();
for (num = 3; num < 100; num += 2)
{
if (IsPrime(num) && IsPrime(num+2))
printf("%d and %d are twin prime numbers\n", num, num+2);
}
getch();
}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。