Subversion Repositories distributed

Compare Revisions

No changes between revisions

Regard whitespace Rev 13 → Rev 14

/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");
}
}