Wen dieser ganze SQL-Quatsch nicht interessiert, der kann sich natürlich auch einfach nur die gesuchten Zahlen ansehen.
create table Zahl (zahl int identity, nutzlos int) insert into Zahl (nutzlos) values (0) while (select count(1) from Zahl) < 100 insert into Zahl (nutzlos) select nutzlos from Zahl delete Zahl where zahl > 100 delete Zahl where zahl = 1Man möge mir verzeihen, dass ich SQL-Keywords klein schreibe. Ein ANSI SQL Parser verzeiht mir das. Unter echten Datenbank-Programmieren ist es freilich verpönt, aber wir wollen hier ja in erster Linie ein Rätsel lösen und nicht programmieren.
Jetzt haben wir eine Tabelle mit Zahlen. Wir wollen eine Tabelle mit Faktoren Schrägstrich Summanden, nämlich eine Tabelle mit Zahlenpaaren. Sowohl die Multiplikation als auch die Addition sind kommutativ - das Zahlenpaar (X, Y) ist für unsere Lösung identisch zu (Y, X). Deswegen nehmen wir nicht alle Zahlenpaare in unsere Tabelle auf, sondern nur diejenigen, bei denen die zweite Zahl größer oder gleich der ersten Zahl ist.
create table Paar (X int, Y int, produkt int, summe int) insert into Paar select X.zahl, Y.zahl, X.zahl * Y.zahl, X.zahl + Y.zahl from Zahl as X inner join Zahl as Y on Y.zahl >= X.zahlWarum wir jetzt 4950 Zeilen in der Tabelle Paar haben, kann man unter dem Stichwort Der kleine Gauß nachlesen :-)
Wir suchen also nach der Menge der Produkte, die in der Auflistung aller Produkte aus zwei Zahlen zwischen 2 und 100 mehrfach auftauchen. Wir erzeugen dazu eine Tabelle der Produkte und zählen, wie viele Faktorenpaare jedes Produkt ergeben.
create table Produkt (produkt int, anzahl int) insert into Produkt select produkt, count(1) from Paar group by produktDie gute Nachricht: es gibt jetzt nur noch 1087 mögliche Produkte mit 3157 denkbaren Kombinationen von Faktoren. Hurra!
select count(distinct produkt) as Produkte, count(1) as Kombinationen from Paar where produkt in (select produkt from Produkt where anzahl > 1)