Rozkłady liczby naturalnej na iloczyn

0

Witam

Ostatnio natknąłem się na zadanie polegające na tym, aby dla danej liczby naturalnej wypisać jej wszystkie rozkłady na iloczyn różnych między sobą składników naturalnych w kolejności rosnącej (nie mogą się powtarzać)
np: dla 24:
124,
2
12,
234,
38,
4
6 (chyba wszystkie).
Czy mógłby mnie ktoś naprowadzić na rozwiązanie?

0

zauważ że nieszczęścia chodzą parami, jedno mniejsze od pierwiastka, a drugie tak samo tylko odwrotnie :)

0

Stworzyłem coś takiego (kod w Javie):

int l = 0 , m = 0, h = 0;

public void Wyswietl_iloczyny(int k)
	{		
		System.out.println("1 * " + k);	
		
		for (int i=2; i < Math.sqrt(k); ++i)
		{				
			if (k%i == 0)
			{				
				System.out.println(i + " * " + k/i + " ");
				l = k/i;
				for (int a=3; a < Math.sqrt(l); ++a)
				{
					if (l%a == 0)
					{
						if (i < a)
						{
							System.out.println(i + " * " + a + " * " + l/a);
							m = l/a;
							for (int b=4; b < Math.sqrt(m); ++b)
							{
								if (m%b == 0)
								{
									if (a < b)
									{
										System.out.println(i + " * " + a + " * " + b + " * " + m/b);
										h = m/b;
										for (int c=5; c < Math.sqrt(h); ++c)
										{
											if (h%c == 0)
											{
												if (b < c)
												{
													System.out.println(i + " * " + a + " * " + b + " * " + c + " * " + h/c);
												}
											}
										}
									}
								}
							}	
						}
					}
				}
			}
		}
	}

Tyle zagnieżdżeń gdyż najmniejszy rozkład 6 liczbowy to: 2 * 3 * 4 * 5 * 6 * 7 = 5040, a problem dotyczył liczby z przedziału (0 < k < 1000), wystarczy 5. Jednakże wygląda to bardzo nie elegancko. Jest jakiś sposób, aby to zoptymalizować?

0

A czy widzisz jakieś podobieństwo między kolejnymi zagnieżdżeniami? Bo ja widzę....

0

No dobra zrobię to na funkcjach zagnieżdżonych chociaż wątpię, żeby to było bardziej eleganckie...

0

Zrób to tak żeby było uniwersalne - działało dla dowolnych danych, a nie tylko do 1000. Wtedy będzie dobrze.

0

Już sobie poradziłem za pomocą rekurencji. Dzięki wszystkim za poświęcony czas.

1 użytkowników online, w tym zalogowanych: 0, gości: 1