/ViaThinkSoft Distributed/src/de/viathinksoft/immortable/gen8/Gen8Test.java |
---|
0,0 → 1,35 |
package de.viathinksoft.immortable.gen8; |
public class Gen8Test { |
private static int[] berechneUnsterblich(int n) { |
int[] a = new int[n]; |
int r; |
int u; |
int m; |
if (n <= 0) |
return new int[0]; |
a[0] = 5; |
if (n <= 1) |
return new int[0]; |
a[1] = 2; |
r = 2; |
u = 1; |
while (u < n - 1) { |
r = (r - a[u]) / 10 + a[u]; |
u++; |
for (m = 1; m < u; m++) |
r += a[m] * a[u - m]; |
a[u] = r % 10; |
} |
return a; |
} |
public static void main(String[] args) { |
int[] x = berechneUnsterblich(10000); |
for (int i=0; i<x.length; i++) { |
System.out.print(x[i]); |
} |
} |
} |
Property changes: |
Added: svn:mime-type |
+text/plain |
\ No newline at end of property |
/ViaThinkSoft Distributed/src/de/viathinksoft/immortable/gen8/Gen9Test.java |
---|
0,0 → 1,52 |
package de.viathinksoft.immortable.gen8; |
import java.util.Vector; |
public class Gen9Test { |
private static int sav_r; |
private static int sav_u; |
private static Vector<Integer> sav_a; |
private static void calc(Vector<Integer> a, int u, int r, int amount) { |
int s, m, k; |
int cnt = 0; |
while (true) { |
r = (r - a.elementAt(u)) / 10 + a.elementAt(u); |
s = 0; |
for (m = 1, k = u; m < k; m++, k--) { |
s += a.elementAt(m) * a.elementAt(k); |
} |
r += 2 * s; |
if (m == k) { |
r += a.elementAt(m) * a.elementAt(m); |
} |
u++; |
a.add(r % 10); |
// TODO: Hier einen "savepoint" erstellen: (r, u, a[]) |
sav_r = r; |
sav_u = u; |
sav_a = a; |
System.out.print(r % 10); |
if (++cnt == amount) break; |
} |
} |
public static void main(String[] args) { |
sav_a = new Vector<Integer>(); |
sav_a.add(5); |
sav_a.add(2); |
sav_r = 2; |
sav_u = 1; |
// 60982128199526522937799166014009016980323243247550001183680 |
for (int i=0; i<50; i++) { |
calc(sav_a, sav_u, sav_r, 1); |
} |
} |
} |
Property changes: |
Added: svn:mime-type |
+text/plain |
\ No newline at end of property |
/ViaThinkSoft Distributed/src/de/viathinksoft/immortable/genX/ImmortIterator.java |
---|
0,0 → 1,159 |
package de.viathinksoft.immortable.genX; |
// TODO: Immort Test + Backups regelmäßig durchführen |
import java.io.BufferedReader; |
import java.io.BufferedWriter; |
import java.io.File; |
import java.io.FileReader; |
import java.io.FileWriter; |
import java.io.IOException; |
import java.util.Vector; |
public class ImmortIterator { |
/* |
* public static boolean isImmortable(BigInteger num) { |
// Alternativ: n²%10^m == n%10^m |
return num.pow(2).toString().endsWith(num.toString()); |
} |
*/ |
// TODO: Output M5/M6 function... |
// TODO: r als BigInteger? |
private static final String SIGNATURE = "Immortable Interator GenX int DSO 1000"; |
private static final int SOFTBREAK = 76; |
private Vector<Integer> a = new Vector<Integer>(); |
private int u; |
private int r; |
private int saveInterval = 100000; // TODO: Größer |
private String filename; |
// TODO: load+save prüfen |
public ImmortIterator(String filename) throws Exception { |
this.filename = filename; |
load(); |
} |
public int getSaveInterval() { |
return this.saveInterval; |
} |
public void setSaveInterval(int saveInterval) { |
this.saveInterval = saveInterval; |
} |
private boolean savePointExists() { |
return new File(filename).exists(); |
} |
private void load() throws Exception { |
if (!savePointExists()) |
return; |
BufferedReader f = new BufferedReader(new FileReader(filename)); |
String s = f.readLine(); |
if (!s.equals(SIGNATURE)) { |
throw new Exception("Wrong signature"); |
} |
f.readLine(); // "" |
f.readLine(); // "(u)" |
s = f.readLine(); |
u = Integer.parseInt(s); |
f.readLine(); // "" |
f.readLine(); // "(r)" |
s = f.readLine(); |
r = Integer.parseInt(s); // TODO: more than 1 line |
f.readLine(); // "" |
f.readLine(); // "(M5rev)" |
a.clear(); |
do { |
s = f.readLine(); |
if (s == null) break; // eof |
for (int i=0; i<s.length(); i++) { |
a.add(new Integer(s.substring(i, i+1))); |
} |
} while (!s.equals("")); |
f.close(); |
} |
private void save() throws IOException { |
BufferedWriter f = new BufferedWriter(new FileWriter(filename)); |
f.write(SIGNATURE + "\r\n"); |
f.write("\r\n"); |
f.write("(u)\r\n"); |
f.write(u + "\r\n"); |
f.write("\r\n"); |
f.write("(r)\r\n"); |
f.write(r + "\r\n"); // TODO: Softbreak |
f.write("\r\n"); |
f.write("(M5rev)\r\n"); |
int i = 0; |
for (Integer xa : a) { |
f.write(xa.toString()); |
if (++i % SOFTBREAK == 0) { |
f.write("\r\n"); |
} |
} |
if (++i % SOFTBREAK != 0) { |
f.write("\r\n"); |
} |
f.close(); |
} |
public void calcIterate(int amount) throws IOException { |
int s, m, k; |
int cnt = 0; |
if (a.size() < 2) { |
a.add(5); |
a.add(2); |
u = 1; |
r = 2; |
cnt += 2; |
} |
while (true) { |
r = (r - a.elementAt(u)) / 10 + a.elementAt(u); |
s = 0; |
for (m = 1, k = u; m < k; m++, k--) { |
s += a.elementAt(m) * a.elementAt(k); |
} |
r += 2 * s; |
if (m == k) { |
r += a.elementAt(m) * a.elementAt(m); |
} |
u++; |
a.add(r % 10); |
if (cnt % saveInterval == 0) { |
save(); |
} |
if (++cnt == amount) { |
save(); |
break; |
} |
} |
} |
} |
Property changes: |
Added: svn:mime-type |
+text/plain |
\ No newline at end of property |
/ViaThinkSoft Distributed/src/de/viathinksoft/immortable/genX/original.txt |
---|
0,0 → 1,23 |
/* Berechnet a[0]..a[n-1], also bis einschliesslich M_5(n) . */ |
/* Es wird vorausgesetzt, dass das Feld a auf einen genuegend grossen Platz fuer n Bytes zeigt! */ |
void BerechneUnsterblich (unsigned char *a, int n) |
{ |
int r,s,u,m,k; |
if (n <= 0) return; |
a[0] = 5; |
if (n <= 1) return; |
a[1] = 2; |
r = 2; |
u = 1; |
while (u < n-1) |
{ |
r = (r-a[u])/10 + a[u]; |
s = 0; |
for (m = 1, k = u; m < k; m++,k--) s += a[m]*a[k]; |
r += 2*s; |
if (m == k) r += a[m]*a[m]; |
a[++u] = r % 10; |
} |
} |
"5 Mal editiert" |
Property changes: |
Added: svn:mime-type |
+text/plain |
\ No newline at end of property |
/ViaThinkSoft Distributed/src/de/viathinksoft/immortable/genX/MainUnit.java |
---|
0,0 → 1,10 |
package de.viathinksoft.immortable.genX; |
public class MainUnit { |
public static void main(String[] args) throws Exception { |
ImmortIterator x = new ImmortIterator("data.txt"); |
x.calcIterate(-1); |
} |
} |
Property changes: |
Added: svn:mime-type |
+text/plain |
\ No newline at end of property |
/ViaThinkSoft Distributed/src/de/viathinksoft/immortable/gen2/ImmortableBase.java |
---|
0,0 → 1,7 |
package de.viathinksoft.immortable.gen2; |
public enum ImmortableBase { |
M5, M6 |
} |
Property changes: |
Added: svn:mime-type |
+text/plain |
\ No newline at end of property |
/ViaThinkSoft Distributed/src/de/viathinksoft/immortable/gen2/ImmortableWriter.java |
---|
5,7 → 5,6 |
import java.io.IOException; |
import java.math.BigInteger; |
import de.viathinksoft.immortable.gen2.math.ImmortableBase; |
public class ImmortableWriter { |
/ViaThinkSoft Distributed/src/de/viathinksoft/immortable/gen2/math/ImmortableBase.java |
---|
File deleted |
Property changes: |
Deleted: svn:mime-type |
-text/plain |
\ No newline at end of property |
/ViaThinkSoft Distributed/src/de/viathinksoft/immortable/gen2/Gen2Test.java |
---|
3,7 → 3,6 |
import java.io.IOException; |
import java.math.BigInteger; |
import de.viathinksoft.immortable.gen2.math.ImmortableBase; |
public class Gen2Test { |
/ViaThinkSoft Distributed/src/de/viathinksoft/immortable/gen2/Immortable.java |
---|
3,7 → 3,6 |
import java.math.BigInteger; |
import de.viathinksoft.immortable.gen2.math.CoPrimeExpectedException; |
import de.viathinksoft.immortable.gen2.math.ImmortableBase; |
import de.viathinksoft.immortable.gen2.math.MathUtils; |
import de.viathinksoft.immortable.gen2.math.MathUtils2; |
/ViaThinkSoft Distributed/src/de/viathinksoft/immortable/gen5/Gen6Test.java |
---|
0,0 → 1,102 |
package de.viathinksoft.immortable.gen5; |
import java.math.BigInteger; |
import de.viathinksoft.immortable.gen2.Immortable; |
public class Gen6Test { |
private static BigInteger a(String u, int i) { |
if (i < 0) |
return BigInteger.ZERO; // test |
if (i == 0) |
return BigInteger.valueOf(5); // test |
String s = u.toString(); |
if (i > s.length() - 1) |
return BigInteger.ZERO; // test |
return new BigInteger("" + s.charAt(s.length() - 1 - i)); |
} |
private static String z = "5"; |
private static BigInteger x(int u) { |
BigInteger x = BigInteger.ZERO; |
for (int k = 0; k <= u - 1; k++) { |
for (int m = 0; m <= k; m++) { |
x = x.add(a(z, m).multiply(a(z, k - m)).multiply( |
BigInteger.TEN.pow(k))); |
} |
} |
return x; |
} |
private static BigInteger y(int u) { |
BigInteger y = BigInteger.ZERO; |
for (int m = 1; m <= u - 1; m++) { |
y = y.add(a(z, m).multiply(a(z, u - m)).multiply( |
BigInteger.TEN.pow(u))); |
} |
return y; |
} |
public static void main(String[] args) { |
int i = 0; |
BigInteger x = null; |
BigInteger y = null; |
while (true) { |
if (!Immortable.isImmortable(new BigInteger(z))) { |
System.out.println("FEHLER: " + z); |
} |
i++; |
if (i == 50) |
break; |
int u = z.toString().length() + 1; |
// BigInteger x = x(u); |
// BigInteger y = y(u); |
if (x == null) { |
x = x(u); |
} else { |
int k = u - 1; |
for (int m = 0; m <= k; m++) { |
x = x.add(a(z, m).multiply(a(z, k - m)).multiply( |
BigInteger.TEN.pow(k))); |
} |
} |
if (y == null) { |
y = y(u); |
} else { |
int m = u - 1; |
y = y.add(a(z, m).multiply(a(z, u - m)).multiply( |
BigInteger.TEN.pow(u))); |
} |
BigInteger za = x.add(y).mod(BigInteger.TEN.pow(u + 1)); |
// z = za; |
// z = new BigInteger(a(za, u-1) + z.toString()); |
String m = "0"; |
// System.out.println("- "+za); |
while (m.charAt(0) == '0') { |
int p = za.toString().length() - u; |
if (p < 0) { |
m = "00" + za; |
break; |
} |
m = za.toString().substring(p); |
u++; |
} |
z = m; |
// System.out.println(z); |
} |
System.out.println(z); |
} |
} |
Property changes: |
Added: svn:mime-type |
+text/plain |
\ No newline at end of property |
/ViaThinkSoft Distributed/src/de/viathinksoft/immortable/gen5/Gen7Test.java |
---|
0,0 → 1,89 |
package de.viathinksoft.immortable.gen5; |
import java.math.BigInteger; |
import de.viathinksoft.immortable.gen2.Immortable; |
public class Gen7Test { |
private static BigInteger a(String u, int i) { |
if (i < 0) |
return BigInteger.ZERO; // test |
if (i == 0) |
return BigInteger.valueOf(5); // test |
if (i > u.length() - 1) |
return BigInteger.ZERO; // test |
return new BigInteger("" + u.charAt(u.length() - 1 - i)); |
} |
private static BigInteger x(String z, int u) { |
BigInteger x = BigInteger.ZERO; |
for (int k = 0; k <= u - 1; k++) { |
for (int m = 0; m <= k; m++) { |
x = x.add(a(z, m).multiply(a(z, k - m)).multiply( |
BigInteger.TEN.pow(k))); |
} |
} |
return x; |
} |
private static BigInteger y(String z, int u) { |
BigInteger y = BigInteger.ZERO; |
for (int m = 1; m <= u - 1; m++) { |
y = y.add(a(z, m).multiply(a(z, u - m)).multiply( |
BigInteger.TEN.pow(u))); |
} |
return y; |
} |
private static boolean isImmor2(String z) { |
int u = z.length() + 1; |
BigInteger x = x(z, u); |
BigInteger y = y(z, u); |
BigInteger za = x.add(y).mod(BigInteger.TEN.pow(u + 1)); |
//System.out.println(za + " <-> " + z + " <-> " + z.substring(z.length()-(u-1))); |
String rr = z.substring(z.length()-(u-1)); |
return za.toString().endsWith(rr); |
} |
public static void main(String[] args) throws Exception { |
int i = 0; |
StringBuilder z = new StringBuilder("5"); |
while (true) { |
i++; |
if (!Immortable.isImmortable(new BigInteger(z.toString()))) { |
System.out.println("Nicht immortable: " + z); |
} |
StringBuilder rs = new StringBuilder(); |
boolean xxx = false; |
for (int p=9; p>=0; p--) { |
//rs = new StringBuilder(Integer.toString(p)).append(z); |
rs = new StringBuilder(Integer.toString(p).concat(z.toString())); |
//System.out.println(rs); |
if (isImmor2(rs.toString())) { |
// if (Immortable.isImmortable(new BigInteger(rs.toString()))) { |
xxx = true; |
break; |
} |
} |
if (!xxx) { |
System.out.println(z); |
throw new Exception("Nix gefunden!"); |
} |
z = rs; |
if (i == 1000) |
break; |
} |
System.out.println(z); |
} |
} |
Property changes: |
Added: svn:mime-type |
+text/plain |
\ No newline at end of property |
/ViaThinkSoft Distributed/src/de/viathinksoft/immortable/gen5/Datenspeicherung.java |
---|
0,0 → 1,47 |
package de.viathinksoft.immortable.gen5; |
import java.io.BufferedWriter; |
import java.io.FileWriter; |
import java.io.IOException; |
import java.math.BigInteger; |
public class Datenspeicherung { |
// private ImmortableBase b; |
private StringBuilder tc = new StringBuilder(); |
private int last_u; |
private BigInteger last_r; |
private BigInteger last_s; |
public void add(BigInteger t, BigInteger r, BigInteger s) { |
this.last_u++; |
this.last_r = r; |
this.last_s = s; |
this.tc.append(t); // reverse! |
} |
public void save(String filename) throws IOException { |
BufferedWriter f = new BufferedWriter(new FileWriter(filename)); |
String s; |
s = "Gen 5 DS"; |
f.write(s); |
s = "u = " + last_u; |
f.write(s); |
s = "r = " + last_r; |
f.write(s); |
s = "s = " + last_s; |
f.write(s); |
s = "X = " + tc.toString(); |
f.write(s); |
System.out.println(s.subSequence(0, 50)); // debug |
f.close(); |
} |
} |
Property changes: |
Added: svn:mime-type |
+text/plain |
\ No newline at end of property |
/ViaThinkSoft Distributed/src/de/viathinksoft/immortable/gen5/Gen5Test.java |
---|
1,5 → 1,14 |
package de.viathinksoft.immortable.gen5; |
/* |
* gen4 hätte bei dieser stelle |
* 1:02 h gebraucht. |
* |
* wie lange dauert es hier? |
* 3:16 h |
*/ |
import java.io.IOException; |
import java.math.BigInteger; |
import de.viathinksoft.immortable.gen2.math.CRTException; |
28,13 → 37,11 |
{ BigInteger.valueOf(8), BigInteger.valueOf(3) }, |
{ BigInteger.valueOf(4), BigInteger.valueOf(9) } }; |
private static StringBuilder diag = (new StringBuilder()).append("---\n"); |
private static StringBuilder data = (new StringBuilder()); |
public static BigInteger pow(BigInteger x, BigInteger y) { |
if (y.compareTo(BigInteger.ZERO) < 0) |
throw new IllegalArgumentException(); |
BigInteger z = x; // z will successively become x^2, x^4, x^8, x^16, x^32... |
// z will successively become x^2, x^4, x^8, x^16, x^32... |
BigInteger z = x; |
BigInteger result = BigInteger.ONE; |
byte[] bytes = y.toByteArray(); |
for (int i = bytes.length - 1; i >= 0; i--) { |
51,29 → 58,32 |
return result; |
} |
public static void doIt(int init_u, BigInteger init_r, BigInteger init_s, |
BigInteger init_t, int abbruch) throws CoPrimeExpectedException { |
public static void doIt(int init_u, BigInteger init_r, |
BigInteger init_s, BigInteger init_t, int abbruch) |
throws CoPrimeExpectedException, IOException { |
Datenspeicherung ds = new Datenspeicherung(); |
int u = init_u; |
BigInteger r_ = init_r; |
BigInteger s_ = init_s; |
BigInteger t = init_t; |
final boolean dodiag = false; |
final boolean reverse = true; |
final boolean want_m5 = false; |
BigInteger p2pow = CONST_2.pow(u - 1); // TODO: leftshift |
BigInteger p5pow = CONST_5.pow(u - 1); |
// test: r halb so klein halten |
boolean wasMod2 = r_.mod(CONST_2).equals(BigInteger.ZERO); |
r_ = r_.divide(CONST_2); |
while (true) { |
BigInteger r = r_; |
BigInteger s = s_; |
if (dodiag) { |
diag = diag.append("[M6] u=").append(u).append(", t=") |
.append(t).append(", r=").append(r).append(", s=") |
.append(s).append(";\n"); |
} |
ds.add(t, r, s); |
if (want_m5) { |
if (u == 1) { |
t = CONST_5; |
81,14 → 91,11 |
t = CONST_9.subtract(t); |
} |
} |
if (reverse) { |
data = data.append(t); |
} else { |
data = new StringBuilder(t.toString()).append(data); |
} |
if (u == abbruch) |
if (u == abbruch) { |
ds.save("ds5_res.txt"); |
break; |
} |
int rem = u % 4; |
117,7 → 124,8 |
// remx = Integer.parseInt(""+l.charAt(l.length()-1))%5; |
// } |
int remr = r.mod(CONST_2).intValue(); |
// int remr = r.mod(CONST_2).intValue(); |
int remr = (wasMod2) ? 0 : 1; // test: r halb so klein halten |
// int remr; |
// { |
142,8 → 150,14 |
// p5pow = CONST_5.pow(u); |
// p5pow = pow(CONST_5, BigInteger.valueOf(u)); |
p5pow = p5pow.multiply(CONST_5); |
r_ = t.multiply(p5pow).add(r).divide(CONST_2); |
// r_ = t.multiply(p5pow).add(r).divide(CONST_2); |
// test: r halb klein halten |
BigInteger[] dr = t.multiply(p5pow).divideAndRemainder(CONST_2); |
r_ = dr[0].add(dr[1].add(r)); |
wasMod2 = r_.mod(CONST_2).equals(BigInteger.ZERO); |
r_ = r_.divide(CONST_2); |
// p2pow = CONST_2.pow(u); |
// p2pow = p2pow.multiply(CONST_2); |
p2pow = p2pow.shiftLeft(1); |
151,17 → 165,14 |
u++; |
} |
} |
public static void main(String[] args) throws CRTException { |
public static void main(String[] args) throws CRTException, IOException { |
int a1 = 10000; |
int a2 = 20000; |
int a2 = 40000; |
// ----------- |
diag = (new StringBuilder()).append("---\n"); |
data = (new StringBuilder()); |
long zstVorher = System.currentTimeMillis(); |
doIt(1, new BigInteger("3"), new BigInteger("1"), new BigInteger("6"), |
a1); |
170,8 → 181,6 |
// ----------- |
diag = (new StringBuilder()).append("---\n"); |
data = (new StringBuilder()); |
zstVorher = System.currentTimeMillis(); |
doIt(1, new BigInteger("3"), new BigInteger("1"), new BigInteger("6"), |
a2); |
180,12 → 189,15 |
// ----------- |
double c = (double)delta2/((double)a2/a1*delta1); |
double c = ((double) delta2 / ((double) a2 / a1 * delta1)); |
System.out.println("Zeit benötigt: " + delta1 + " -> " + delta2 + " (c="+c+"!=0)" |
+ " ms"); |
// if (Immortable.isImmortable(new BigInteger(data.toString()))) { |
// System.out.println("OK"); |
// } else { |
// System.out.println("FAIL"); |
// } |
// System.out.println(diag); |
System.out.println(data); |
System.out.println("Zeit benötigt: " + delta1 + " -> " + delta2 |
+ " (c=" + c + ")" + " ms"); |
} |
} |