diff options
Diffstat (limited to 'mat/advent/0')
-rw-r--r-- | mat/advent/0/Makefile | 2 | ||||
-rwxr-xr-x | mat/advent/0/better.php | 52 | ||||
-rwxr-xr-x | mat/advent/0/fakulteta | bin | 0 -> 8640 bytes | |||
-rw-r--r-- | mat/advent/0/fakulteta.c | 70 |
4 files changed, 124 insertions, 0 deletions
diff --git a/mat/advent/0/Makefile b/mat/advent/0/Makefile new file mode 100644 index 0000000..d9c3a08 --- /dev/null +++ b/mat/advent/0/Makefile @@ -0,0 +1,2 @@ +default: + gcc -pedantic fakulteta.c -o fakulteta diff --git a/mat/advent/0/better.php b/mat/advent/0/better.php new file mode 100755 index 0000000..278ea32 --- /dev/null +++ b/mat/advent/0/better.php @@ -0,0 +1,52 @@ +#!/usr/bin/env php +<?php +# shamelessly stolen from https://www.geeksforgeeks.org/prime-factor/ +// PHP Efficient program to print all +// prime factors of a given number to an arr + +// function to print all prime +// factors of a given number n to an arr +function primeFactors($n) { + $n = abs($n); + $f = array(); + // Print the number of + // 2s that divide n to the arr + while($n % 2 == 0) + { + $f[] = 2; + $n = $n / 2; + } + // n must be odd at this + // point. So we can skip + // one element (Note i = i +2) + for ($i = 3; $i <= sqrt($n); $i = $i + 2) { + + // While i divides n, + // print i and divide n + while ($n % $i == 0) + { + $f[] = $i; + $n = $n / $i; + } + } + + // This condition is to + // handle the case when n + // is a prime number greater + // than 2 + if ($n > 2) + $f[] = $n; + + return $f; +} +$f = array(); +for($i = 1; $i <= 100; $i++) { // za vse faktorje v 100! + fprintf(STDERR, "calculating for %d ... ", $i); + $x = primeFactors($i); + fprintf(STDERR, "%s\n", implode(",", $x)); + $f = array_merge($f,$x); +} +var_dump($f); +$r = array_count_values($f); +echo "ŠTEVILK 7 JE V 100! natanko ".$r[7]."\n"; +?> diff --git a/mat/advent/0/fakulteta b/mat/advent/0/fakulteta Binary files differnew file mode 100755 index 0000000..06aeea4 --- /dev/null +++ b/mat/advent/0/fakulteta diff --git a/mat/advent/0/fakulteta.c b/mat/advent/0/fakulteta.c new file mode 100644 index 0000000..24fb624 --- /dev/null +++ b/mat/advent/0/fakulteta.c @@ -0,0 +1,70 @@ +// shamelessly ukradeno iz +// https://www.geeksforgeeks.org/factorial-large-number/ +// Maximum number of digits in output +#include <stdio.h> +#include <stdlib.h> +#define MAX 5000 +int multiply(int x, int res[], int res_size); + +// This function finds factorial of large numbers +// and prints them +void factorial(int n) +{ + int res[MAX]; + + // Initialize result + res[0] = 1; + int res_size = 1; + + // Apply simple factorial formula n! = 1 * 2 * 3 * 4...*n + for (int x=2; x<=n; x++) + res_size = multiply(x, res, res_size); + + fprintf(stdout, "Factorial of given number is \n"); + for (int i=res_size-1; i>=0; i--) + fprintf(stdout, "%d", res[i]); + fprintf(stdout, "\n"); +} + +// This function multiplies x with the number +// represented by res[]. +// res_size is size of res[] or number of digits in the +// number represented by res[]. This function uses simple +// school mathematics for multiplication. +// This function may value of res_size and returns the +// new value of res_size +int multiply(int x, int res[], int res_size) +{ + int carry = 0; // Initialize carry + + // One by one multiply n with individual digits of res[] + for (int i=0; i<res_size; i++) + { + int prod = res[i] * x + carry; + + // Store last digit of 'prod' in res[] + res[i] = prod % 10; + + // Put rest in carry + carry = prod/10; + } + + // Put carry in res and increase result size + while (carry) + { + res[res_size] = carry%10; + carry = carry/10; + res_size++; + } + return res_size; +} + +// Driver program +int main(int argc, char ** argv) { + if(argc != 2) { + fprintf(stderr, "uporaba: %s stevilka\n", argv[0]); + return 1; + } + factorial(atoi(argv[1])); + return 0; +} |