如何解决素数是2的情况

问题遇到的现象和发生背景

问题描述
德巴赫猜想:
任意一个大偶数都能分解为两个素数的和,
对与输入的一个正偶数,写一个程序来验证歌德巴赫猜想。
由于每个正偶数可能分解成多组素数和,仅输出分解值分别是最小和最大素数的一组,按从小到大顺序输出。

输入说明
输入一个正偶数n,1<n<1000。

输出说明
输出分解出的两个最小和最大素数。

输入样例
10

输出样例
3 7

问题相关代码
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
int main()
{
    int num;
    scanf("%d",&num);
    
    int m,i;
    for (i=2;i<num;i++)
    {
        m=num-i;
    
    int i;
    int sign=0,sign1=0;//作为两数是否为素数的标记
    for (i=2;i<=m-1;i++)
    {
        if(m%i==0)
        break;
        else
        sign=1;
        
    }
    if(sign==1)
    {
        for (i=2;i<=num-m;i++)
        {
            if((num-m)%i==0)
            break;
            else
            sign1=1;
        }
        if(sign1=1)
        {
            int min=0;
                while (num-2*m>min)
                {
                    min=num-2*m;
                }
            
            if(m<num-m)
                printf ("%d %d",m,num-m);
            
        }
    }
    }
    return 0;
}

当我验证9时,就出现了3 6,但是正确结果应该时2 7,发现是判断素数那里的问题,求改正方法。

else sign=1是错的,其它错误也很多,比如i重复定义了,然后第二个for循环的结束条件也错了。
修改如下:

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
int main()
{
    int num;
    scanf("%d",&num);
    
    int m,i;
    for (i=2;i<num;i++)
    {
        m=num-i;
    
    int j;
    int sign=1,sign1=1;//作为两数是否为素数的标记
    for (j=2;j<=m-1;j++)
    {
        if(m%j==0)
        {
            sign =  0;
            break;
        }
    }
    if(sign==1)
    {
        for (j=2;j<=num-m-1;j++)
        {
            if((num-m)%j==0)
            {
                sign1=0;
                break;
            }
        }
        if(sign1==1)
        {
                int min=0;
                while (num-2*m>min)
                {
                    min=num-2*m;
                }
            
            if(m<num-m)
                printf ("%d %d",m,num-m);
            
        }
    }
    }


  return 0;
}


您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632