gpt4 book ai didi

c++ - 编写一个函数,生成将 n 写为素数之和的所有可能性

转载 作者:太空宇宙 更新时间:2023-11-04 03:58:08 26 4
gpt4 key购买 nike

<分区>

基本上,当我运行代码时,如果我给它一个大的数字它就可以工作(将它分成素数,但是当我想为低数字运行它时它不起作用)我看到的问题是如果我给程序数字 8 它不会在屏幕上打印任何内容。(我认为它与 2+2+2+2 有关)如果我写 50 它会显示所有可能性而无需在一行上重复 1 个素数

#include <math.h>
#include <stdio.h>
#include <stdlib.h>


#define is_sol 2
#define is_pos 4
#define impos 0

int n, *st;

int prim (int n)
{
if ( n < 2 )
return impos;
else
if ( n != 2 && (n % 2) == 0)
return impos;
else
{ long i;
for(i = 3; i <=sqrt(1.0*n); i +=2)
if ( n % i == 0)
return impos;
}
return is_pos;
}

int test(int h)
{
int i;
if(!h)
return (st[h] < 2 ? impos : prim(st[h]));
if(st[h] <= st[h-1])
return impos;
int p = st[h];
if(!prim(p))
return impos;
int S = 0;
for(i = 0 ; i <= h ; i++)
S += st[i];
if(S == n)
return is_sol;
return (S < n ? is_pos : impos);
}

void print (int h)
{
int i;
for(i = 0 ; i <= h; i++)
printf("%d ", st[i]);
printf("\n");
}

void back(int h)
{
int k;
for(k = 2; k <= n/2; k++)
{
st[h] = k;
int rez = test(h);
if(rez == is_sol)
print(h);
else
{
if(rez == is_pos)
back(h+1);
}
}
}

int main()
{
printf( "Your number: ");
scanf("%d",&n);
st = (int*)malloc(sizeof(int)*(n/2));
back(0);
}

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com