[C言語]白駿9020:キムバッハの推測



構想


  • 少数を探しても大丈夫です.

  • 問題を理解するには、2より大きいすべての偶数を小数+小数として表すことができます.ここまで来たほうがいいですが、ここには条件が必要です.14に示すように、3+11,7+7は、2つの少数差が最も小さい7+7として表すことができる.

  • まず素数を求めるコードを作成した.また小数+小数も出力されます.

  • 問題は小数+小数出力、最初
  • 	while (i < n)
    	{
    		scanf("%d", &a);
    		half = a / 2;
    		max = 2;
    		j = 2;
    		while (j <= half)
    		{
    			if (ft_is_prime(j) == 1)
    			{
    				if (max < j)
    				{
    					max = j;
    				}
    			}
    			j++;
    		}
    		printf("%d %d\n", max, a - max);
    		i++;
    	}
    このように二つに割って、最大値を求める方法で行こうとしたが、うまくいかなかった.ここで後で説明する小さな数値を求めると、a-の小さな数値が小数であるかどうかをチェックする部分には、halfに最も近い数ではなくhalfに最も近い数が現れます.

  • だからグーグルでヒントを見ましたこれはhalfから終了までのヒントです

  • 私は2からhalfまで差の大きい値を出力し、halfから差の小さい値を出力することができます.
  • 私が解読したコード

    #include <stdio.h>
    
    int ft_is_prime(int nb) // 소수찾기
    {
    	int i;
    	i = 2;
    	if (nb < 2)
    		return (0);
    	while (i <= (nb / i))
    	{
    		if (nb % i == 0)
    			return (0);
    		i++;
    	}
    	return (1);
    }
    
    int main()
    {
    	int a, n, i, half;
    	scanf("%d", &n);
    	i = 0;
    	while (i < n)
    	{
    		scanf("%d", &a);
    		half = a / 2;
    		while (half <= a)
    		{
    			if (ft_is_prime(half) == 1)
    			{
    				if (ft_is_prime(a - half) == 1)
    				break;
    			}
    			half++;
    		}
    		printf("%d %d\n", a - half, half);
    		i++;
    	}
    }
    これは、小数を検索し、a-half値が小数である場合に出力を中断する方法です.halfが増加するのは、突き当りまで行く方法なので、印刷時に値が変わります.
    他の人のコードも似たような論理です.しかし、少数を求める方法には違いがある.私はis primeで行います.まずこれを理解して、後で他の方法が必要なら、その時になってから勉強しましょう.私は混同するのが怖いので、他の人のコードを追加しません.