首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C循环中的孪生素数只给出了第一个值

C循环中的孪生素数只给出了第一个值
EN

Stack Overflow用户
提问于 2019-11-29 01:18:45
回答 2查看 86关注 0票数 0

代码如下:

代码语言:javascript
运行
复制
#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是孪生质数

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-11-29 01:44:01

在num1循环的每次迭代中,您应该清除fac1..3。一旦fac1达到2,if子句就再也不会出现了。

您的代码还显示出很大的优化空间:所有偶数都不是命中的候选者。如果你用num1=5运行代码,你将同时测试num1-2和num1+2,然后用num1=7再次测试5- 7对。

下面是我用独立的prime-tester编写的代码:

代码语言:javascript
运行
复制
#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();
}
票数 0
EN

Stack Overflow用户

发布于 2019-11-29 01:52:26

它只给出两个结果,因为你寻找孪生素数的代码不会对其他数字重复。对于连续的数字,您必须重复此过程。

代码语言:javascript
运行
复制
#include<stdio.h>

int isPrime(int n);

void main() {

  int num;
  clrscr();
    for(num = 5; num < 100; num = num+1)
    {
        if(isPrime(num) && isPrime(num + 2))
        {            
            printf("%d and %d are twin prime numbers\n", num, num+2);
            num= num + 2; 
        }                
    }    
   getch();
}

int isPrime(int n)
{
    if(n == 1)
    {
        return 0;
    }
    int i;
    for(i = 2; i < n; i++)
    {
        if(n % i == 0)
        {
            // number is not prime
            return 0;
        }
    }

    // number is prime
    return 1;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59093770

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档