Second Opinion
Folosind serviciul second opinion ne puteți trimite RMN-uri, CT -uri, angiografii, fișiere .pdf, documente medicale. Astfel vă vom putea da o opinie neurochirurgicală, fără ca aceasta să poată înlocui un consult de specialitate. Răspunsurile vor fi date prin e-mail în cel mai scurt timp posibil (de obicei în mai putin de 24 de ore, dar nu mai mult de 48 de ore). Second opinion – Neurohope este un serviciu gratuit. www.neurohope.ro |
filtrare numere din secventa
#1
Posted 08 December 2022 - 20:31
salutare comunitate, am nevoie de ajutorul vostru cu o problema in c++ iar conditia e urmatoarea:
Numerele urâte sunt numere ai căror unici factori primi sunt 2, 3 sau 5. Secvența 1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 15, ... arată primele 11 numere urâte. Prin convenție, 1 este inclus. Fiind dat un număr n, sarcina este de a găsi cel de-al n-lea număr urât. Elaborați un program C++ care permite rezolvarea acestei probleme, datele de intrare se vor citi dintr-un fișier extern. {} Apreciez ajutorul oricui
Edited by MarianG, 09 December 2022 - 00:12.
|
#3
Posted 09 December 2022 - 12:38
Hudy_17, on 08 decembrie 2022 - 20:31, said:
Numerele urâte sunt numere ai căror unici factori primi sunt 2, 3 sau 5. "Un numar N diferit de 1 este urat daca si numai daca (1) exista un numar D in multimea {2, 3, 5} a.i. D divide N SI (2) numarul (N / D) este urat!" O fi adevarat?
Edited by MarianG, 09 December 2022 - 12:54.
|
#4
Posted 09 December 2022 - 12:57
2i * 3j * 5k
Edited by MarianG, 09 December 2022 - 12:57. |
#5
Posted 18 December 2022 - 12:51
Strict din defininite,
Quote numerele urâte sunt numere ai căror unici factori primi sunt 2, 3 sau 5 este_numar_urat(int num) { ....cat timp numar divide 5 numar / = 5 ....cat timp numar divide 3 numar / = 3 ....cat timp numar divide 2 numar / = 2 ....return (1 == numar); }------------------------------------------------------------------------------ este_numar_urat(int num) { ....int lista = {5, 3, 2} ....eliminta_lista_factori(num, lista) ....return (1 == num); }acum avem nevoie de o functie "eliminta_lista_factori" ------------------------------------------------------------------------------ functie eliminta_lista_factori(numar, lista) { ....pentru fiecare factor din lista ........elimina_factor(numar, factor); } este_numar_urat(int num) { ....int lista = {5, 3, 2} ....eliminta_lista_factori(num, lista) ....return (1 == num); }care la randul sau are nevoie de "elimina_factor" ------------------------------------------------------------------------------ functie elimina_factor (numar, factor) { ....cat timp numar divide factor numar / = factor } functie eliminta_lista_factori(numar, lista) { ....pentru fiecare factor din lista ........elimina_factor(numar, factor); } este_numar_urat(int num) { ....int lista = {5, 3, 2} ....eliminta_lista_factori(num, lista) ....return (1 == num); }------------------------------------------------------------------------------ main() { ....limita = citeste_fisier(); ....contor = 0; ....numar = 2; ....cat timp contor < limita .......contor+= este_numar_urat( numar++ ); // to do } p.s. aceasta este o schita, detaliile de implementare, constasnte si pointeri raman ca tema Edited by MarianG, 18 December 2022 - 13:40. |
#6
Posted 18 December 2022 - 13:26
Alta abordare:
Voi genera dinamic o multime A, prin transformari succesive; dupa fiecare transformare, numarul cel mai mic din multime este numarul urat cu numarul de ordine egal cu numarul de transformari aplicate pana la acel moment: A = { 1 } => 1 = nr. urat cu nr. de ordine 0 A = { 1 } + { 1 * 2, 1 * 3, 1 * 5 } - { 1 } = { 2, 3, 5 } => 2 = nr. urat cu nr. de ordine 1 A = { 2, 3, 5 } + { 2 * 2, 2 * 3, 2 * 5 } - { 2 } = { 3, 4, 5, 6, 10 } => 3 = nr. urat cu nr. de ordine 2 A = { 3, 4, 5, 6, 10 } + { 3 * 2, 3 * 3, 3 * 5 } - { 3 } = { 4, 5, 6, 9, 10, 15 } => 4 = nr. urat cu nr. de ordine 3 A = { 4, 5, 6, 9, 10, 15 } + { 4 * 2, 4 * 3, 4 * 5 } - { 4 } = { 5, 6, 8, 9, 10, 12, 15, 20 } => 5 = nr. urat cu nr. de ordine 4 A = { 5, 6, 8, 9, 10, 12, 15, 20 } + { 5 * 2, 5 * 3, 5 * 5 } - { 5 } = { 6, 8, 9, 10, 12, 15, 20, 25 } => 6 = nr. urat cu nr. de ordine 5 A = { 6, 8, 9, 10, 12, 15, 20, 25 } + { 6 * 2, 6 * 3, 6 * 5 } - { 6 } = { 8, 9, 10, 12, 15, 18, 20, 25, 30 } => 8 = nr. urat cu nr. de ordine 6 A = { 8, 9, 10, 12, 15, 18, 20, 25, 30 } + { 8 * 2, 8 * 3, 8 * 5 } - { 8 } = { 9, 10, 12, 15, 16, 18, 20, 24, 25, 30, 40 } => 9 = nr. urat cu nr. de ordine 7 Sa se demonstreze ca solutia este corecta! Glumesc.... P.S. Numarul meu de ordine poate fi cu un pas in urma celui cerut in enunt... Edited by darkangel2, 18 December 2022 - 13:29. |
#8
Posted 18 December 2022 - 15:08
int smart_set_init(struct smart_set_st** ss); // initializes set ss int smart_set_destroy(struct smart_set_st** ss); // destroys set ss int smart_set_add(struct smart_set_st* ss, int x); // adds x to set ss int smart_set_remove(struct smart_set_st* ss, int x); // removes x from set ss (if it exists) int smart_set_get_min(struct smart_set_st* ss, int* x); // sets x to minimum value from set ss int transform(struct smart_set_st* ss) { ..int min_val = 0; ..smart_set_get_min(ss, &min_val); ..smart_set_remove(ss, min_val); ..smart_set_add(ss, min_val * 2); ..smart_set_add(ss, min_val * 3); ..smart_set_add(ss, min_val * 5); ..return 0; } int main() { ..int n = 20; // determine the 20th ugly number ..int ugly_nr = 0; ..struct smart_set_st *ss = NULL; ..smart_set_init(&ss); ..smart_set_add(ss, 1); ..for (int i = 0; i < n - 1; i++) { ....transform(); ..} ..smart_set_get_min(ss, &ugly_nr); ..smart_set_destroy(&ss); ..// do something with ugly_nr e.g. print it ..return 0; } Numai mie mi se strica indent-ul cand folosesc markup-ul "code" + "Preview Post"? Edited by darkangel2, 18 December 2022 - 15:09. |
#9
Posted 15 January 2023 - 18:44
darkangel2, on 09 decembrie 2022 - 12:38, said:
"Un numar N diferit de 1 este urat daca si numai daca (1) exista un numar D in multimea {2, 3, 5} a.i. D divide N SI (2) numarul (N / D) este urat!" O fi adevarat? Inductie logica. Altfel prin inductie matematica, poti transporta doar adevarul, deci poti reformula problema in termeni de numere frumoase si rezulta acelasi lucru folosind teorema fundamentala a aritmeticii. Ar fi si culmea sa existe numere urate! Edited by maccip, 15 January 2023 - 18:49. |
#10
Posted 15 January 2023 - 18:56
Aici este o posibila solutie in C++ pentru rezolvarea problemei numerelor urate data de inteligenta artificiala de la https://chat.openai.com/chat
#include <iostream> #include <queue> using namespace std; int main() { int n; cin >> n; // initializam cozile pentru 2, 3 si 5 priority_queue<int, vector<int>, greater<int>> q2, q3, q5; q2.push(2); q3.push(3); q5.push(5); // numarul curent int ugly = 1; for (int i = 1; i < n; i++) { // luam cel mai mic numar din cele 3 cozi int num2 = q2.top(); int num3 = q3.top(); int num5 = q5.top(); ugly = min(min(num2, num3), num5); // eliminam numarul din coada sa if (ugly == num2) { q2.pop(); } if (ugly == num3) { q3.pop(); } if (ugly == num5) { q5.pop(); } // adaugam numerele generate prin inmultirea cu 2, 3 si 5 q2.push(ugly * 2); q3.push(ugly * 3); q5.push(ugly * 5); } cout << ugly << endl; return 0; } Acest program utilizeaza trei cozi de prioritati (priority_queue) pentru a tine evidenta numerelor urate generate prin inmultirea cu 2, 3 si 5. Initializam cozile cu 2, 3 si 5 si utilizam un ciclu for pentru a genera numerele urate pana la n. In fiecare iteratie, luam cel mai mic numar din cele trei cozi si il eliminam din coada sa. Apoi, inmultim numarul cu 2, 3 si 5 si il adaugam in cozile corespunzatoare. In final, cel mai mic numar din cozile noastre va fi cel de-al n-lea numar urat. Nota: acest program este bazat pe o implementare de baza , o optimizare poate fi implementata prin utilizarea unui vector sau alta structura de date.
Edited by MarianG, 16 January 2023 - 12:24.
|
|
#11
Posted 15 January 2023 - 19:31
maccip, on 15 ianuarie 2023 - 18:44, said:
Pentru ca un numar N sa fie urat, e necesar ca un alt numar D/N<N , D/N>0 sa fie urat. Presupun ca ai vrut sa zici "Pentru ca un numar N sa fie urat, e necesar ca un alt numar N/D<N , N/D>0 sa fie urat." (sau nu inteleg eu ce zici, ceea ce nu e exclus). Propozitia este falsa: N = 1 este urat (asa specifica enuntul problemei) dar nu exista niciun numar D a.i. 1/D<1, 1/D>0 sa fie urat. Propozitia corecta este "Pentru ca un numar N, diferit de 1, sa fie urat, e necesar ca un alt numar N/D<N , N/D>0 sa fie urat." Prin urmare, exista un numar urat pentru care propozitia nu mai poate fi aplicata (numarul 1), deci sirul este finit. wertyck, on 15 ianuarie 2023 - 18:56, said:
Acest program utilizeaza trei cozi de prioritati (priority_queue) Neclar de ce e nevoie de 3 cozi, nu mergea cu una singura asa cum zice @darkangel2 mai sus? |
#12
Posted 15 January 2023 - 19:49
darkangel2, on 15 ianuarie 2023 - 19:31, said:
Presupun ca ai vrut sa zici "Pentru ca un numar N sa fie urat, e necesar ca un alt numar N/D<N , N/D>0 sa fie urat." (sau nu inteleg eu ce zici, ceea ce nu e exclus). darkangel2, on 15 ianuarie 2023 - 19:31, said:
Presupun ca ai vrut sa zici "Pentru ca un numar N sa fie urat, e necesar ca un alt numar N/D<N , N/D>0 sa fie urat." (sau nu inteleg eu ce zici, ceea ce nu e exclus). Propozitia este falsa: N = 1 este urat (asa specifica enuntul problemei) dar nu exista niciun numar D a.i. 1/D<1, 1/D>0 sa fie urat. Conform a ceea ce am citat (de la tine), un numar diferit de 1 poate fi urat. 1 e exclus din start din multimea posibilitatilor. Am citit si analizat si prima postare. Definitia e diferita, deci si raspunsul o sa fie diferit. Un "numar al caror unici factori primi", inseamna pentru mine ca acel numar in primul rand sa aiba factor prim unic. Caz in care numarul poate fi { 2^i }∪{ 3^i }∪{ 5^i } Insa din exemplul dat cu primele numere urate, raspunsul e cel sugerat de MarianG. Insa, pentru acest lucru, formularea nu e corecta. Ar fi trebuit sa fie ceva de genul "numar al caror factori primi se afla exclusiv in multimea" |
#13
Posted 16 January 2023 - 12:08
din definitia oferita de initiator dar si exemplul si secventa de numere generata am dedus ca vrea (smooth-5)
https://en.wikipedia...i/Smooth_number |
#14
Posted 16 January 2023 - 12:59
@wertyck ne spui si ce l-ai intrebat ?
Quote MarianG: greetings Hello! How can I help you today? MarianG: I have difficulties solving a smoth-5 algorithm using C I'd be happy to help you with your smooth-5 algorithm in C. Can you please provide more information about the problem you're trying to solve and any specific issues you're encountering? Also, it would be helpful if you could share the code you have so far. MarianG: A number is smooth-5 if prime factors are no greater than 5. In example 30 is composed by 2*3*5, it's smooth-5, and 21 is composed by 3*7 and it's not smooth-5. I see, so you need to write a program in C that checks if a given number is smooth-5 by checking if its prime factors are less than or equal to 5. Here is an example of how you could approach this problem: #include <stdio.h> int is_smooth_5(int num) { if (num <= 1) { return 0; // not a smooth-5 number } while (num % 2 == 0) { num /= 2; } while (num % 3 == 0) { num /= 3; } while (num % 5 == 0) { num /= 5; } return num == 1; } int main() { int num; printf("Enter a number: "); scanf("%d", &num); if (is_smooth_5(num)) { printf("%d is a smooth-5 number.\n", num); } else { printf("%d is not a smooth-5 number.\n", num); } return 0; }This program uses the is_smooth_5 function to check if a given number is smooth-5. The function first checks if the number is less than or equal to 1, in which case it is not smooth-5. Otherwise, it repeatedly divides the number by 2, 3, and 5 until the number is no longer divisible by those prime factors. If the resulting number is 1, then the original number is smooth-5. If not, then it is not. You can use this code as a starting point and make modifications as needed. Let me know if you have any question. MarianG: That would be enough. Thank you very much. You're welcome! I'm glad I could help. Let me know if you have any other questions or if there's anything else I can do to assist you. Good luck with your program! @maccip daca redactez asa e mai bine ? Quote Numerele urâte sunt numere ai căror unici factori primi sunt 2, 3 sau 5. Secvența {1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 15} arată primele 11 numere urâte. Prin convenție, 1 este inclus. Fiind dat un număr n, sarcina este de a găsi cel de-al n-lea număr urât. Elaborați un program C++ care permite rezolvarea acestei probleme. Datele de intrare se vor citi dintr-un fișier extern. maccip, on 15 ianuarie 2023 - 19:49, said: Insa din exemplul dat cu primele numere urate, raspunsul e cel sugerat de MarianG. |
Anunturi
▶ 0 user(s) are reading this topic
0 members, 0 guests, 0 anonymous users