池啾 2022-11-17 08:46 采纳率: 76.3%
浏览 60
已结题

n内的双胞胎对数c语言

想问一下这个程序有哪里错了呢?第一次用flag,这段是求相差2的素数在n内的对数,请各位神仙help me,thank you!


#include<stdio.h>
int main()
{
    int n,flag,i,m,k=0,sum=0,t,c;
    scanf("%d",&n);
    int a[10000];
    for(i=0;i<n;i++)
    {
        a[i]=i;
    }
    if(n==1)
    {
        printf("0");
    }
    else
    {
    for(m=2;m<n;m++)
    {
        if(a[i]%m==0)
        {
            k++;
        }
    }
    if(k!=0)
    {
        flag=1;
    }
    else
    {
        flag=0;
    }
    if(flag==1)
    {
        c=a[i];
        for(t=2;t<(c+2);t++)
        {
            if((c+2)%t==0)
            {
                sum++;
            }
        }
    }
            printf("%d",sum);
}
 return 0;
}
  • 写回答

2条回答 默认 最新

  • a5156520 2022-11-17 10:11
    关注

    应该是判断素数和双胞胎素数那里错了,判断一个数是否为素数,可以使用2到这个数之间的数整除来判断是否为素数,如果可以整除说明不是素数,如果都不可以整除说明是素数,你上面的代码恰和这个相反,所以错了,然后还需要判断这个数+2是否为素数,两者都是素数才能判断出一个双胞胎数;

    可以使用两个标记来判断双胞胎的数量,第一个标记用来标记用来判断当前的数是否为素数,第二个标记用来判断当前数+2是否为素数,如果两个标记都满足,则双胞胎的数量+1,修改如下:

    参考链接:
    C++:双胞胎数_五十六朵花的博客-CSDN博客_c++双胞胎数

    
    
    
    
    #include<stdio.h>
    int main()
    {
        int n,flag,i,m,k=0,sum=0,t,c;
        scanf("%d",&n);
        int a[10000];
        
        for(i=0;i<n;i++)
        {
            a[i]=i;
        }
        
        if(n==1)
        {
            printf("0");
        }
        
        else
        {    
            int firstPrime,secondPrime;
            int twins=1;
            for(int i=2;i<=n;i++){
                
                firstPrime=1;//默认当前数为素数 
                
                for(int j=2;j<i;j++){
                    if(i%j==0){  //如果当前数能被2到当前数之间的数整除,则当前数不是素数 
                        firstPrime=0;
                        break;
                    }
                }
                
                if(firstPrime==1){  //如果当前数是素数,则判断当前数+2是否为素数 
                
                    secondPrime=1;  //默认当前数+2为素数 
                    
                    for(int j=2;j<i+2;j++){                  
                        if((i+2)%j==0){  //如果当前数+2能被2到当前数+2之间的数整除,则说明当前数+2不是素数 
                            secondPrime=0;
                            break;
                        }
                    }
                    
                    if((i+2)>n){  //当当前数大于输入的n,则第二个素数不满足要求,第二个素数标记置0 
                        secondPrime=0;
                    }
                    
                    if(secondPrime==1){ //如果当前数+2为素数,则双胞胎数量+1,同时让i++,配合for循环的i++, 即下一次开始从当前数+2开始判断 
                        sum++;
                        i++;
                    }
                }
                
            } 
            
    //        
    //        for(m=2;m<n;m++)
    //        {
    //            if(a[i]%m==0)
    //            {
    //                k++;
    //            }
    //        }
    //        
    //        
    //        if(k!=0)
    //        {
    //            flag=1;
    //        }
    //        else
    //        {
    //            flag=0;
    //        }
    //        
    //        if(flag==1)
    //        {
    //            c=a[i];
    //            for(t=2;t<(c+2);t++)
    //            {
    //                if((c+2)%t==0)
    //                {
    //                    sum++;
    //                }
    //            }
    //        }
            
            printf("%d",sum);
        }
     return 0;
    }
    
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 11月25日
  • 已采纳回答 11月17日
  • 修改了问题 11月17日
  • 创建了问题 11月17日

悬赏问题

  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?