Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Samsung Galaxy A35

Sfat pentru aprinderea automata a...

Masina de copt paine - pareri

Cum reactivez Google Maps?
 Conectare tableta X220la Tv

Femeile tinere nu mai vor sa munc...

La mulți ani @un_dac!

La multi ani de Sfantul Gheorghe&...
 Job - Facultate sau certificare

Deadpool & Wolverine (2023)

sistem hibrid eoliana + panouri +...

Outlook e muta pe Android
 Constructie Mun. Iasi. Casa P+1.

Cum mai rezolvati cu chiriasii ra...

Tastatura si mouse cu baterie int...

AC Gree duce la palpait de becuri
 

filtrare numere din secventa

- - - - -
  • Please log in to reply
13 replies to this topic

#1
Hudy_17

Hudy_17

    New Member

  • Grup: Candidate Members
  • Posts: 0
  • Înscris: 08.12.2022
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 oricuiPosted Image Posted Image

Edited by MarianG, 09 December 2022 - 00:12.
filtrare numere din secventa


#2
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,435
  • Înscris: 10.08.2005

 Hudy_17, on 08 decembrie 2022 - 20:31, said:

salutare comunitate, am nevoie de ajutorul vostru cu o problema in c++ iar conditia e urmatoarea:
Conditiile noastre sunt aici

#3
darkangel2

darkangel2

    Senior Member

  • Grup: Senior Members
  • Posts: 3,356
  • Înscris: 26.01.2019

 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.
paginatie


#4
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,435
  • Înscris: 10.08.2005
2i * 3j * 5k

Edited by MarianG, 09 December 2022 - 12:57.


#5
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,435
  • Înscris: 10.08.2005
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
darkangel2

darkangel2

    Senior Member

  • Grup: Senior Members
  • Posts: 3,356
  • Înscris: 26.01.2019
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! Posted Image
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.


#7
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,435
  • Înscris: 10.08.2005
Ne arati si cod cum functioneaza?

#8
darkangel2

darkangel2

    Senior Member

  • Grup: Senior Members
  • Posts: 3,356
  • Înscris: 26.01.2019

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
maccip

maccip

    46 ani

  • Grup: Senior Members
  • Posts: 33,246
  • Înscris: 06.01.2007

View Postdarkangel2, 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?
Pentru ca un numar N sa fie urat, e necesar ca un alt numar D/N<N , D/N>0 sa fie urat. Prin inductie,  e necesar sa existe un sir descrescator infinit de numere naturale, ceea ce nu e posibil.
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!
Posted Image

Edited by maccip, 15 January 2023 - 18:49.


#10
wertyck

wertyck

    Guru Member

  • Grup: Senior Members
  • Posts: 13,563
  • Înscris: 13.03.2005
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.
tags


#11
darkangel2

darkangel2

    Senior Member

  • Grup: Senior Members
  • Posts: 3,356
  • Înscris: 26.01.2019

View Postmaccip, 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.

View Postwertyck, 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? :D

#12
maccip

maccip

    46 ani

  • Grup: Senior Members
  • Posts: 33,246
  • Înscris: 06.01.2007

View Postdarkangel2, 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).
asa este. Trebuia sa fi scris N/D, nu invers.

View Postdarkangel2, 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.

Eu nu am citit prima postare ca mi se pare scrisa neingrijit.
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
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,435
  • Înscris: 10.08.2005
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
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,435
  • Înscris: 10.08.2005
@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.

View Postmaccip, on 15 ianuarie 2023 - 19:49, said:

Insa din exemplul dat cu primele numere urate, raspunsul e cel sugerat de MarianG.
asa a spus si entitatea

Anunturi

Second Opinion 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

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate