Pages

Showing posts with label BigInteger. Show all posts
Showing posts with label BigInteger. Show all posts

Saturday, July 30, 2011

Fibonacci numbers

Mathematica
Note, that this implementation exists. Algorithm is:
Fibonacci[n_] := Round[GoldenRatio^n/Sqrt[5]]

Be aware, that this formula:
can not be trivially applied in other languages.

Java
In Java, we have arbitrarily large integers and decimals, but prebuilt classes lack the functionality (it's a shame). For example we can not easily take root of 5. To do this, we would need to use a library like JScience or write Newton approximation method (what can be quite error prone process).


C#
In C#, there is no arbitrarily large decimals. It does have class decimal (with 28-29 significant digits), but assuming that Math class supports it, is just asking too much (it's a shame). But thumbs up, for it at least has BigInteger.

Sunday, September 13, 2009

Euler Problem 48 solution

Time (s): ~0.034
package margusmartseppcode.From_40_to_49;

public class Problem_48 {
 public static void main(String[] args) {
  long result = 0, d10 = 10000000000L;
  for (long u = 1, tmp = u; u <= 1000; result += tmp, ++u, tmp = u)
   for (long v = 1; v < u; ++v)
    tmp = (tmp * u) % d10;

  System.out.println(result % d10);
 }
}
Time (s): ~0.224
package margusmartseppcode.From_40_to_49;

import java.math.BigInteger;

public class Problem_48 {
 // Note: i = 2 !!!
 public static void main(String[] args) {
  BigInteger num = BigInteger.ONE;
  for (int i = 2; i < 1000; i++)
   num = num.add(BigInteger.valueOf(i).pow(i));
  String result = num.toString();
  System.out.println(result.substring(result.length() - 10));
 }
}

Tuesday, September 8, 2009

Euler Problem 20 solution

Time (s): ~0.001
package margusmartseppcode.From_20_to_29;

import java.math.BigInteger;

public class Problem_20 {
 static final int maxSize = 101;
 static BigInteger f[] = new BigInteger[maxSize];
 static {
  f[0] = BigInteger.ONE;
  for (int i = 1; i < maxSize; i++)
   f[i] = f[i - 1].multiply(BigInteger.valueOf(i));
 }

 public static void main(String[] args) {
  int sum = 0;

  for (char c : f[100].toString().toCharArray())
   sum += Character.getNumericValue(c);

  System.out.println(sum);
 }
}

Euler Problem 16 solution

Time (s): ~0.003
package margusmartseppcode.From_10_to_19;

import java.math.BigInteger;

public class Problem_16 {

 public static void main(String[] args) {
  int sum = 0;
  for (char c : BigInteger.valueOf(2L).pow(1000).toString().toCharArray())
   sum += c - '0';
  System.out.println(sum);
 }
}

Euler Problem 15 solution

Time (s): ~0.001
package margusmartseppcode.From_10_to_19;

import java.math.BigInteger;

public class Problem_15 {
 static final int maxSize = 42;
 static BigInteger f[] = new BigInteger[maxSize];
 static {
  f[0] = BigInteger.ONE;
  for (int i = 1; i < maxSize; i++)
   f[i] = f[i - 1].multiply(BigInteger.valueOf(i));
 }

 public static void main(String[] args) {
  // s=x=y
  // !(x+y)/!x*!y
  int s = 20;
  System.out.println(f[s + s].divide((f[s].multiply(f[s]))));
 }
}

Euler Problem 13 solution

Time (s): ~0.010
package margusmartseppcode.From_10_to_19;

import java.math.BigInteger;

public class Problem_13 {
 static String str[] = {
   "37107287533902102798797998220837590246510135740250",
   "46376937677490009712648124896970078050417018260538",
   "74324986199524741059474233309513058123726617309629",
   "91942213363574161572522430563301811072406154908250",
   "23067588207539346171171980310421047513778063246676",
   "89261670696623633820136378418383684178734361726757",
   "28112879812849979408065481931592621691275889832738",
   "44274228917432520321923589422876796487670272189318",
   "47451445736001306439091167216856844588711603153276",
   "70386486105843025439939619828917593665686757934951",
   "62176457141856560629502157223196586755079324193331",
   "64906352462741904929101432445813822663347944758178",
   "92575867718337217661963751590579239728245598838407",
   "58203565325359399008402633568948830189458628227828",
   "80181199384826282014278194139940567587151170094390",
   "35398664372827112653829987240784473053190104293586",
   "86515506006295864861532075273371959191420517255829",
   "71693888707715466499115593487603532921714970056938",
   "54370070576826684624621495650076471787294438377604",
   "53282654108756828443191190634694037855217779295145",
   "36123272525000296071075082563815656710885258350721",
   "45876576172410976447339110607218265236877223636045",
   "17423706905851860660448207621209813287860733969412",
   "81142660418086830619328460811191061556940512689692",
   "51934325451728388641918047049293215058642563049483",
   "62467221648435076201727918039944693004732956340691",
   "15732444386908125794514089057706229429197107928209",
   "55037687525678773091862540744969844508330393682126",
   "18336384825330154686196124348767681297534375946515",
   "80386287592878490201521685554828717201219257766954",
   "78182833757993103614740356856449095527097864797581",
   "16726320100436897842553539920931837441497806860984",
   "48403098129077791799088218795327364475675590848030",
   "87086987551392711854517078544161852424320693150332",
   "59959406895756536782107074926966537676326235447210",
   "69793950679652694742597709739166693763042633987085",
   "41052684708299085211399427365734116182760315001271",
   "65378607361501080857009149939512557028198746004375",
   "35829035317434717326932123578154982629742552737307",
   "94953759765105305946966067683156574377167401875275",
   "88902802571733229619176668713819931811048770190271",
   "25267680276078003013678680992525463401061632866526",
   "36270218540497705585629946580636237993140746255962",
   "24074486908231174977792365466257246923322810917141",
   "91430288197103288597806669760892938638285025333403",
   "34413065578016127815921815005561868836468420090470",
   "23053081172816430487623791969842487255036638784583",
   "11487696932154902810424020138335124462181441773470",
   "63783299490636259666498587618221225225512486764533",
   "67720186971698544312419572409913959008952310058822",
   "95548255300263520781532296796249481641953868218774",
   "76085327132285723110424803456124867697064507995236",
   "37774242535411291684276865538926205024910326572967",
   "23701913275725675285653248258265463092207058596522",
   "29798860272258331913126375147341994889534765745501",
   "18495701454879288984856827726077713721403798879715",
   "38298203783031473527721580348144513491373226651381",
   "34829543829199918180278916522431027392251122869539",
   "40957953066405232632538044100059654939159879593635",
   "29746152185502371307642255121183693803580388584903",
   "41698116222072977186158236678424689157993532961922",
   "62467957194401269043877107275048102390895523597457",
   "23189706772547915061505504953922979530901129967519",
   "86188088225875314529584099251203829009407770775672",
   "11306739708304724483816533873502340845647058077308",
   "82959174767140363198008187129011875491310547126581",
   "97623331044818386269515456334926366572897563400500",
   "42846280183517070527831839425882145521227251250327",
   "55121603546981200581762165212827652751691296897789",
   "32238195734329339946437501907836945765883352399886",
   "75506164965184775180738168837861091527357929701337",
   "62177842752192623401942399639168044983993173312731",
   "32924185707147349566916674687634660915035914677504",
   "99518671430235219628894890102423325116913619626622",
   "73267460800591547471830798392868535206946944540724",
   "76841822524674417161514036427982273348055556214818",
   "97142617910342598647204516893989422179826088076852",
   "87783646182799346313767754307809363333018982642090",
   "10848802521674670883215120185883543223812876952786",
   "71329612474782464538636993009049310363619763878039",
   "62184073572399794223406235393808339651327408011116",
   "66627891981488087797941876876144230030984490851411",
   "60661826293682836764744779239180335110989069790714",
   "85786944089552990653640447425576083659976645795096",
   "66024396409905389607120198219976047599490197230297",
   "64913982680032973156037120041377903785566085089252",
   "16730939319872750275468906903707539413042652315011",
   "94809377245048795150954100921645863754710598436791",
   "78639167021187492431995700641917969777599028300699",
   "15368713711936614952811305876380278410754449733078",
   "40789923115535562561142322423255033685442488917353",
   "44889911501440648020369068063960672322193204149535",
   "41503128880339536053299340368006977710650566631954",
   "81234880673210146739058568557934581403627822703280",
   "82616570773948327592232845941706525094512325230608",
   "22918802058777319719839450180888072429661980811197",
   "77158542502016545090413245809786882778948721859617",
   "72107838435069186155435662884062257473692284509516",
   "20849603980134001723930671666823555245252804609722",
   "53503534226472524250874054075591789781264330331690" };

 public static void main(String[] args) {
  BigInteger tmp = BigInteger.ZERO;
  for (String s : str)
   tmp=tmp.add(new BigInteger(s));
  System.out.println(tmp.toString().substring(0, 10));
 }
}