Red de conocimiento informático - Conocimiento informático - Por favor ayúdenme a ver cómo programar estos problemas con conocimientos de C++, ¡gracias!

Por favor ayúdenme a ver cómo programar estos problemas con conocimientos de C++, ¡gracias!

La primera pregunta es tamiz lineal, las últimas tres preguntas deben buscarse y podarse

La primera pregunta: #include

# include

#include

const?p>usando?namespace?std;

const?int?MAXN=1010;

int?pri[MAXN],opt[MAXN],cnt=0,be[MAXN];

bool?not_pri[MAXN];

int?main ()

{

int?maxn=0,n=1;

scanf("%d",&opt[n]);

while(opt[n])

{

if(opt[n]>maxn)maxn= opt[n];

scanf ("% d",&opt[++n]);

}

n--;

for(int?i=2;i< =maxn; ++i)

{

if(!not_pri[i])

{

pri[++cnt ]=i ;

int?k=i;

while(i*k<=maxn)

not_pri[i*k]=true,k++ ;

}

}

for(int?i=1;i< ;=n;++i)

{

int?k=1,ans=0;

while(k<=cnt&&pri[k]<=opt[i])

ans+=pri[ k++];

printf("%d\n", ans);

}

}

En la segunda pregunta, utilice permutación o Métodos de búsqueda para descomponer los factores primos de y0/x0.

La tercera pregunta, escribí búsqueda, poda diferida, si se agota el tiempo de espera, agregue poda y pase

#include

#include

#include

usando?namespace?std;

bool?used[11];

void ?solve (int?n,int?now)

{

for(int?i=1;i<=9;++i)

si( !usado[i] )

{

usado[i]=true;

ahora=ahora*1i;

if(n!=3)

resolver(n+1,ahora);

else

{

if(ahora* 3<999)

{

bool?flag=true;

int?p=now*2;

while (flag&&p )

{

if(used[p%10])

flag=false;

else

usado[p%10]=true;

p/=10;

}

p=ahora*3;

while(bandera&&p)

{

if(used[p%10])

bandera=false;

else

usado[p%10]=true;

p/=10;

}

if(bandera)

printf("%d?%d?%d\n",ahora,ahora*2,ahora*3);

p=ahora*2;

mientras (p )

usado[p%10]=false,p/=10;

p=ahora*3;

while(p)

usado[p%10]=false,p/=10;

p=ahora;

mientras(p)

usado[ p% 10]=verdadero,p/=10;

}

}

ahora=(ahora-i)/10;

usado[i]=false;

}

}

int?main()

{

solve(1,0);

}

Gracias

Gracias por tu ayuda.