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; p> 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++ ; p> } } 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) 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.