双素数C代码

Twin primes C code

我正在尝试用 C 语言打印以下系列 4 6 12 18 30 42 60 72....最多 n 个。它的逻辑很简单;我们必须打印数字,使得前面和后面的数字应该是质数!但是下面的代码在打印 4 之后没有循环。下面的代码有什么问题?

#include <stdio.h>

int main(){
    int n, i, j, p2, k;
    int count1=0, count2=0;
    printf("enter the number:\n");
    scanf("%d",&n);
    for(i=3;i<n;i++){
        for(j=2;j<i;j++){
            if(i%j==0){
                count1++;
                break;
            }
        }
        p2=i+2;
        for(k=2;k<i;k++){
            if(p2%k==0){
                count2++;
                break;
            }
        }
        if(count1==0 && count2==0){
            printf("%d",i+1);
        }

    }
}

您只需要在循环结束时将计数器设置为 0

#include<stdio.h>
int main(){
int n, i, j, p2, k;
int count1=0, count2=0;
printf("enter the number:\n");
scanf("%d",&n);
for(i=3;i<n;i++){
    for(j=2;j<i;j++){
        if(i%j==0){
            count1++;
            break;
        }
    }
    p2=i+2;
    for(k=2;k<i;k++){
        if(p2%k==0){
            count2++;
            break;
        }
    }
    if(count1==0 && count2==0){
         printf("%d ",i+1);
    }
    count1=0; count2=0;
}
}

你的代码是对的,把count1count2最后设置成0 外循环的

你也可以这样试试。 此代码在 Java 中。您可以将其转换为 C 。逻辑保持不变。 对于 Arraylist,采用等于 n 的固定长度数组。

import java.util.*;
class prime
  {
     public static void main(String[] args){

        int n, i, j, p2, k,o;
        ArrayList<Integer> prime = new ArrayList<Integer>();
        ArrayList<Integer> series = new ArrayList<Integer>();
        int count1=0, count2=0;
       Scanner s = new Scanner(System.in);
       System.out.println("enter the number:\n");
           n=s.nextInt();
       if(n<3)
       {
          System.out.println("prime numbers start from 3");
       } 
       for(i=3;i<=n;i++)
       {
        for(j=2;j<i;j++)
        {
           if(i%j==0)
          {
             count1=1;
             break;
          }

       }
      if(count1==0)
      {
        prime.add(i);
      }
      count1=0;
      }

      for(k=0;k<prime.size()-1;k++)
        {

              int prdsr=prime.get(k);
              int sucsr=prime.get(k+1);
              if((sucsr-prdsr)==2)
              {
                  series.add((prdsr+1));
              }

        } 

        for(o=0;o<series.size();o++)
        {
         System.out.print("  "+series.get(o));
        }
    }
}