首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >双素数C码

双素数C码
EN

Stack Overflow用户
提问于 2017-07-16 06:54:43
回答 2查看 2.6K关注 0票数 0

我试图用C语言打印以下系列的4 6 12 18 30 42 60 72....up到n。它的逻辑很简单;我们必须打印数字,以便前面的和连续的数字应该是素数!但是下面的代码在打印4之后没有循环。下面的代码有什么问题?

代码语言:javascript
复制
#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);
        }

    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-07-16 07:30:20

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

代码语言:javascript
复制
#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;
}
}
票数 1
EN

Stack Overflow用户

发布于 2017-07-16 10:13:14

您的代码是正确的,只需将count1和count2设置为在外层循环的末尾即可。

你也可以这样试试。这段代码是用Java编写的。你可以把它转换成C。逻辑保持不变。对于Arraylist,采用固定长度的数组等于n

代码语言:javascript
复制
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));
        }
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45125908

复制
相关文章

相似问题

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