Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
3
Task/Fibonacci-sequence/C-sharp/fibonacci-sequence-1.cs
Normal file
3
Task/Fibonacci-sequence/C-sharp/fibonacci-sequence-1.cs
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
public static ulong Fib(uint n) {
|
||||
return (n < 2)? n : Fib(n - 1) + Fib(n - 2);
|
||||
}
|
||||
6
Task/Fibonacci-sequence/C-sharp/fibonacci-sequence-10.cs
Normal file
6
Task/Fibonacci-sequence/C-sharp/fibonacci-sequence-10.cs
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
public static ulong Fib(uint n) {
|
||||
var M = new Matrix(1,0,0,1);
|
||||
var N = new Matrix(1,1,1,0);
|
||||
for (uint i = 1; i < n; i++) M *= N;
|
||||
return (ulong)M[0][0];
|
||||
}
|
||||
16
Task/Fibonacci-sequence/C-sharp/fibonacci-sequence-11.cs
Normal file
16
Task/Fibonacci-sequence/C-sharp/fibonacci-sequence-11.cs
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
private static Matrix M;
|
||||
private static readonly Matrix N = new Matrix(1,1,1,0);
|
||||
|
||||
public static ulong Fib(uint n) {
|
||||
M = new Matrix(1,0,0,1);
|
||||
MatrixPow(n-1);
|
||||
return (ulong)M[0][0];
|
||||
}
|
||||
|
||||
private static void MatrixPow(double n){
|
||||
if (n > 1) {
|
||||
MatrixPow(n/2);
|
||||
M *= M;
|
||||
}
|
||||
if (n % 2 == 0) M *= N;
|
||||
}
|
||||
17
Task/Fibonacci-sequence/C-sharp/fibonacci-sequence-12.cs
Normal file
17
Task/Fibonacci-sequence/C-sharp/fibonacci-sequence-12.cs
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
private static int[] fibs = new int[]{ -1836311903, 1134903170,
|
||||
-701408733, 433494437, -267914296, 165580141, -102334155,
|
||||
63245986, -39088169, 24157817, -14930352, 9227465, -5702887,
|
||||
3524578, -2178309, 1346269, -832040, 514229, -317811, 196418,
|
||||
-121393, 75025, -46368, 28657, -17711, 10946, -6765, 4181,
|
||||
-2584, 1597, -987, 610, -377, 233, -144, 89, -55, 34, -21, 13,
|
||||
-8, 5, -3, 2, -1, 1, 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89,
|
||||
144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711,
|
||||
28657, 46368, 75025, 121393, 196418, 317811, 514229, 832040,
|
||||
1346269, 2178309, 3524578, 5702887, 9227465, 14930352, 24157817,
|
||||
39088169, 63245986, 102334155, 165580141, 267914296, 433494437,
|
||||
701408733, 1134903170, 1836311903};
|
||||
|
||||
public static int Fib(int n) {
|
||||
if(n < -46 || n > 46) throw new ArgumentOutOfRangeException("n", n, "Has to be between -46 and 47.")
|
||||
return fibs[n+46];
|
||||
}
|
||||
44
Task/Fibonacci-sequence/C-sharp/fibonacci-sequence-13.cs
Normal file
44
Task/Fibonacci-sequence/C-sharp/fibonacci-sequence-13.cs
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using BI = System.Numerics.BigInteger;
|
||||
|
||||
class Program
|
||||
{
|
||||
// A sparse array of values calculated along the way
|
||||
static SortedList<int, BI> sl = new SortedList<int, BI>();
|
||||
|
||||
// This routine is semi-recursive, but doesn't need to evaluate every number up to n.
|
||||
// Algorithm from here: http://www.maths.surrey.ac.uk/hosted-sites/R.Knott/Fibonacci/fibFormula.html#section3
|
||||
static BI Fsl(int n)
|
||||
{
|
||||
if (n < 2) return n;
|
||||
int n2 = n >> 1, pm = n2 + ((n & 1) << 1) - 1; IfNec(n2); IfNec(pm);
|
||||
return n2 > pm ? (2 * sl[pm] + sl[n2]) * sl[n2] : sqr(sl[n2]) + sqr(sl[pm]);
|
||||
// Helper routine for Fsl(). It adds an entry to the sorted list when necessary
|
||||
void IfNec(int x) { if (!sl.ContainsKey(x)) sl.Add(x, Fsl(x)); }
|
||||
// Helper function to square a BigInteger
|
||||
BI sqr(BI x) { return x * x; }
|
||||
}
|
||||
|
||||
// Conventional iteration method (not used here)
|
||||
public static BI Fm(BI n)
|
||||
{
|
||||
if (n < 2) return n; BI cur = 0, pre = 1;
|
||||
for (int i = 0; i <= n - 1; i++) { BI sum = cur + pre; pre = cur; cur = sum; }
|
||||
return cur;
|
||||
}
|
||||
|
||||
public static void Main()
|
||||
{
|
||||
int num = 2_000_000, digs = 35, vlen;
|
||||
var sw = System.Diagnostics.Stopwatch.StartNew(); var v = Fsl(num); sw.Stop();
|
||||
Console.Write("{0:n3} ms to calculate the {1:n0}th Fibonacci number, ",
|
||||
sw.Elapsed.TotalMilliseconds, num);
|
||||
Console.WriteLine("number of digits is {0}", vlen = (int)Math.Ceiling(BI.Log10(v)));
|
||||
if (vlen < 10000) {
|
||||
sw.Restart(); Console.WriteLine(v); sw.Stop();
|
||||
Console.WriteLine("{0:n3} ms to write it to the console.", sw.Elapsed.TotalMilliseconds);
|
||||
} else
|
||||
Console.Write("partial: {0}...{1}", v / BI.Pow(10, vlen - digs), v % BI.Pow(10, digs));
|
||||
}
|
||||
}
|
||||
29
Task/Fibonacci-sequence/C-sharp/fibonacci-sequence-14.cs
Normal file
29
Task/Fibonacci-sequence/C-sharp/fibonacci-sequence-14.cs
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
using System;
|
||||
using BI = System.Numerics.BigInteger;
|
||||
|
||||
class Program {
|
||||
|
||||
// returns the nth Fibonacci number without calculating 0..n-1
|
||||
static BI oneFib(int n) {
|
||||
BI z = (BI)1 << ++n;
|
||||
return BI.ModPow(z, n, (z << n) - z - 1) % z;
|
||||
}
|
||||
|
||||
// returns an array of Fibonacci numbers from the 0th to the nth
|
||||
static BI[] fibTab(int n) {
|
||||
var res = new BI[++n];
|
||||
BI z = (BI)1 << 1, zz = z << 1;
|
||||
for (int i = 0; i < n; ) {
|
||||
res[i] = BI.ModPow(z, ++i, zz - z - 1) % z;
|
||||
z <<= 1; zz <<= 2;
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
static void Main(string[] args) {
|
||||
int n = 20;
|
||||
Console.WriteLine("Fibonacci numbers 0..{0}: {1}", n, string.Join(" ",fibTab(n)));
|
||||
n = 1000;
|
||||
Console.WriteLine("Fibonacci({0}): {1}", n, oneFib(n));
|
||||
}
|
||||
}
|
||||
7
Task/Fibonacci-sequence/C-sharp/fibonacci-sequence-2.cs
Normal file
7
Task/Fibonacci-sequence/C-sharp/fibonacci-sequence-2.cs
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
public static ulong Fib(uint n) {
|
||||
return Fib(0, 1, n);
|
||||
}
|
||||
|
||||
private static ulong Fib(ulong a, ulong b, uint n) {
|
||||
return (n < 1)? a :(n == 1)? b : Fib(b, a + b, n - 1);
|
||||
}
|
||||
13
Task/Fibonacci-sequence/C-sharp/fibonacci-sequence-3.cs
Normal file
13
Task/Fibonacci-sequence/C-sharp/fibonacci-sequence-3.cs
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
public static ulong Fib(uint x) {
|
||||
if (x == 0) return 0;
|
||||
|
||||
ulong prev = 0;
|
||||
ulong next = 1;
|
||||
for (int i = 1; i < x; i++)
|
||||
{
|
||||
ulong sum = prev + next;
|
||||
prev = next;
|
||||
next = sum;
|
||||
}
|
||||
return next;
|
||||
}
|
||||
11
Task/Fibonacci-sequence/C-sharp/fibonacci-sequence-4.cs
Normal file
11
Task/Fibonacci-sequence/C-sharp/fibonacci-sequence-4.cs
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
using System; using System.Text; // FIBRUS.cs Russia
|
||||
namespace Fibrus { class Program { static void Main()
|
||||
{ long fi1=1; long fi2=1; long fi3=1; int da; int i; int d;
|
||||
for (da=1; da<=78; da++) // rextester.com/MNGUV70257
|
||||
{ d = 20-Convert.ToInt32((Convert.ToString(fi3)).Length);
|
||||
for (i=1; i<d; i++) Console.Write(".");
|
||||
Console.Write(fi3); Console.Write(" "); Console.WriteLine(da);
|
||||
fi3 = fi2 + fi1;
|
||||
fi1 = fi2;
|
||||
fi2 = fi3;
|
||||
}}}}
|
||||
14
Task/Fibonacci-sequence/C-sharp/fibonacci-sequence-5.cs
Normal file
14
Task/Fibonacci-sequence/C-sharp/fibonacci-sequence-5.cs
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
public static IEnumerable<long> Fibs(uint x) {
|
||||
IList<ulong> fibs = new List<ulong>();
|
||||
|
||||
ulong prev = -1;
|
||||
ulong next = 1;
|
||||
for (int i = 0; i < x; i++)
|
||||
{
|
||||
long sum = prev + next;
|
||||
prev = next;
|
||||
next = sum;
|
||||
fibs.Add(sum);
|
||||
}
|
||||
return fibs;
|
||||
}
|
||||
10
Task/Fibonacci-sequence/C-sharp/fibonacci-sequence-6.cs
Normal file
10
Task/Fibonacci-sequence/C-sharp/fibonacci-sequence-6.cs
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
public static IEnumerable<ulong> Fibs(uint x) {
|
||||
ulong prev = -1;
|
||||
ulong next = 1;
|
||||
for (uint i = 0; i < x; i++) {
|
||||
ulong sum = prev + next;
|
||||
prev = next;
|
||||
next = sum;
|
||||
yield return sum;
|
||||
}
|
||||
}
|
||||
6
Task/Fibonacci-sequence/C-sharp/fibonacci-sequence-7.cs
Normal file
6
Task/Fibonacci-sequence/C-sharp/fibonacci-sequence-7.cs
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
static double r5 = Math.Sqrt(5.0), Phi = (r5 + 1.0) / 2.0;
|
||||
|
||||
static ulong fib(uint n) {
|
||||
if (n > 71) throw new ArgumentOutOfRangeException("n", n, "Needs to be smaller than 72.");
|
||||
double r = Math.Pow(Phi, n) / r5;
|
||||
return (ulong)(n < 64 ? Math.Round(r) : Math.Floor(r)); }
|
||||
16
Task/Fibonacci-sequence/C-sharp/fibonacci-sequence-8.cs
Normal file
16
Task/Fibonacci-sequence/C-sharp/fibonacci-sequence-8.cs
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
static decimal Sqrt_dec(decimal x, decimal g) { decimal t, lg;
|
||||
do { t = x / g; lg = g; g = (t + g) / 2M; } while (lg != g);
|
||||
return g; }
|
||||
|
||||
static decimal Pow_dec (decimal bas, uint exp) {
|
||||
if (exp == 0) return 1M;
|
||||
decimal tmp = Pow_dec(bas, exp >> 1); tmp *= tmp;
|
||||
if ((exp & 1) == 1) tmp *= bas; return tmp; }
|
||||
|
||||
static decimal r5 = Sqrt_dec(5.0M, (decimal)Math.Sqrt(5.0)),
|
||||
Phi = (r5 + 1.0M) / 2.0M;
|
||||
|
||||
static ulong fib(uint n) {
|
||||
if (n > 93) throw new ArgumentOutOfRangeException("n", n, "Needs to be smaller than 94.");
|
||||
decimal r = Pow_dec(Phi, n) / r5;
|
||||
return (ulong)(n < 64 ? Math.Round(r) : Math.Floor(r)); }
|
||||
16
Task/Fibonacci-sequence/C-sharp/fibonacci-sequence-9.cs
Normal file
16
Task/Fibonacci-sequence/C-sharp/fibonacci-sequence-9.cs
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
static decimal Sqrt_dec(decimal x, decimal g) { decimal t, lg;
|
||||
do { t = x / g; lg = g; g = (t + g) / 2M; } while (lg != g);
|
||||
return g; }
|
||||
|
||||
static decimal Pow_dec (decimal bas, uint exp) {
|
||||
if (exp == 0) return 1M;
|
||||
decimal tmp = Pow_dec(bas, exp >> 1); tmp *= tmp;
|
||||
if ((exp & 1) == 1) tmp *= bas; return tmp; }
|
||||
|
||||
static decimal r5 = Sqrt_dec(5.0M, (decimal)Math.Sqrt(5.0)),
|
||||
Phi = (r5 + 1.0M) / 2.0M;
|
||||
|
||||
static decimal fib(uint n) {
|
||||
if (n > 128) throw new ArgumentOutOfRangeException("n", n, "Needs to be smaller than 129.");
|
||||
decimal r = Pow_dec(Phi, n) / r5;
|
||||
return n < 64 ? Math.Round(r) : Math.Floor(r); }
|
||||
Loading…
Add table
Add a link
Reference in a new issue