012
03.08.2002, 23:14 Uhr
~NemoEimi
Gast
|
Ok, da bisher keine Lösungsvorschläge da sind, habe ich mich aufgerafft und einen eigenen verfasst. Er ist deutlich schneller, als ich erwartet hätte :
C++: |
#include <iostream> #include <stdlib.h>
int loesung_gefunden = 0; char nicht_eindeutig[5000000];
void suche_nichttriviale_loesung(int sum, int prod, int slot, int letztes, int n) { int laeng = prod - sum + slot; if (laeng == n) {loesung_gefunden = 1; return;} if (laeng > n && laeng < 5000000) {nicht_eindeutig[laeng]=1;return;} if (laeng < n) for (int i = 2; i <= letztes && loesung_gefunden==0; i++) suche_nichttriviale_loesung(sum+i,prod*i,slot+1,i,n); }
int gleichung_eindeutig(int n) { loesung_gefunden = 0; suche_nichttriviale_loesung(0,1,0,n-1,n); return(1-loesung_gefunden); }
int prime(int n) { for (int i = 3; i*i <= n; i = i + 2) if (n%i==0) return(0); return(1); }
int main(int argc, char *argv[]) { int n = atoi(argv[1]); for (int i = 6; i <= n; i = i + 6) if (nicht_eindeutig[ i ]==0 && prime(i-1) && gleichung_eindeutig(i)) cout << i << " "; return 0; }
|
Grüße, NemoEimi
edit by virtual: Codetags eingefügt Dieser Post wurde am 04.08.2002 um 15:17 Uhr von virtual editiert. |