ある自然数nを素数の足し算に分割し、その組み合わせの数を求めるプログラム(例えば5なら5、2+3。8なら、2+2+2+2、2+3+3、3+5といったような分け方。n=0なら1が結果として出てきます)が一部の値に対してまちがった値を出すようなのですが、それが何故なのかわかりません。
lang
1コード#include <stdio.h> 2 3int is_prime(n){ 4 int d = 2; 5 int r = 1; 6 int a ; 7 while(r != 0 ){ 8 r = n % d; 9 d = d + 1; 10 } 11 if(d == n + 1){ 12 a = 1; 13 }else{a = 0; 14 } 15 return a; 16} 17 18 int division_into_primes(int n , int u){ 19 int a = 0; 20 int p = u; 21 if( n < u && n!=0){ 22 a = 0; 23 } 24 else if( n == 0){ 25 a = 1; 26 } 27 else{ 28 for( p = u ; p <= n ; p++){ 29 a = a + is_prime(p) * division_into_primes( n - p , p ); 30 } 31 } 32 return a; 33 } 34 35 36 37 38 main(){ 39 int n; 40 int u = 2; 41 scanf("%d",&n); 42 printf("%d",division_into_primes( n , u)); 43}