commit e72128508349b27185d0187214abec23fe262a72 Author: Yanis Hermassi Date: Mon Oct 12 14:29:24 2020 +0200 yhi/tp02: add architecture and all files .[cho] diff --git a/AUTHORS b/AUTHORS new file mode 100644 index 0000000..7becfc6 --- /dev/null +++ b/AUTHORS @@ -0,0 +1,4 @@ +Yanis +Hermassi +yanis.hermassi +yanis.hermassi@epita.fr diff --git a/digit_count/digit_count.c b/digit_count/digit_count.c new file mode 100644 index 0000000..6b7c578 --- /dev/null +++ b/digit_count/digit_count.c @@ -0,0 +1,13 @@ +#include +#include "digit_count.h" + +unsigned char digit_count(unsigned long n) +{ + unsigned char i = 0; + while(n>0) + { + i+=1; + n = n/10; + } + return i; +} diff --git a/digit_count/digit_count.h b/digit_count/digit_count.h new file mode 100644 index 0000000..cb25197 --- /dev/null +++ b/digit_count/digit_count.h @@ -0,0 +1,6 @@ +#ifndef DIGIT_COUNT_H +#define DIGIT_COUNT_H + +unsigned char digit_count(unsigned long n); + +#endif diff --git a/digit_count/main b/digit_count/main new file mode 100755 index 0000000..da55e21 Binary files /dev/null and b/digit_count/main differ diff --git a/digit_count/main.c b/digit_count/main.c new file mode 100644 index 0000000..447307d --- /dev/null +++ b/digit_count/main.c @@ -0,0 +1,17 @@ +#include +#include "digit_count.h" + +unsigned long power_of_two(unsigned char n) +{ + return 1ul << n; +} + +int main() +{ + unsigned long n = 63 ; + for(unsigned long i = 0; i <= n; i+=1) + { + printf("digit_count(%lu) = %u\n",power_of_two(i),digit_count(power_of_two(i))); + } + return 0; +} diff --git a/divisor_sum/divisor_sum.c b/divisor_sum/divisor_sum.c new file mode 100644 index 0000000..bffed3b --- /dev/null +++ b/divisor_sum/divisor_sum.c @@ -0,0 +1,33 @@ +#include +#include "divisor_sum.h" + +unsigned long isqrt(unsigned long n) +{ + unsigned long r = n; + while (r*r > n) + { + r = r + n/r; + r = r/2; + } + return r; +} + +unsigned long divisor_sum(unsigned long n) +{ + if(n == 1) + { + return 0; + } + if(n<3) + return 1; + unsigned long tmp = 1; + for(unsigned long i = 2; i*i <= n; i++) + { + if(n%i == 0) + tmp += i +n/i; + if(i*i == n) + tmp-=i; + + } + return tmp; +} diff --git a/divisor_sum/divisor_sum.h b/divisor_sum/divisor_sum.h new file mode 100644 index 0000000..96586cb --- /dev/null +++ b/divisor_sum/divisor_sum.h @@ -0,0 +1,6 @@ +#ifndef DIVISOR_SUM_H +#define DIVISOR_SUM_H + +unsigned long divisor_sum(unsigned long n); + +#endif diff --git a/divisor_sum/divisor_sum.o b/divisor_sum/divisor_sum.o new file mode 100644 index 0000000..39d44d2 Binary files /dev/null and b/divisor_sum/divisor_sum.o differ diff --git a/divisor_sum/main b/divisor_sum/main new file mode 100755 index 0000000..7ac14f9 Binary files /dev/null and b/divisor_sum/main differ diff --git a/divisor_sum/main.c b/divisor_sum/main.c new file mode 100644 index 0000000..529bd4f --- /dev/null +++ b/divisor_sum/main.c @@ -0,0 +1,22 @@ +#include +#include +#include +#include "divisor_sum.h" +#include "../isqrt/isqrt.h" + +int main(int argc, char** argv) +{ + if(argc != 2) + { + errx(1, "Error"); + return 1; + } + unsigned long param = strtoul(argv[1],NULL, 10); + if(param == 0) + { + errx(1,"Error"); + return 1; + } + printf("divisor_sum(%lu) = %lu", param,divisor_sum(param)); + return 0; +} diff --git a/facto/facto.c b/facto/facto.c new file mode 100644 index 0000000..0650f03 --- /dev/null +++ b/facto/facto.c @@ -0,0 +1,12 @@ +#include +#include "facto.h" + +unsigned long facto(unsigned long n) +{ + unsigned long t = 1; + for(unsigned long i = 2; i <= n; i++) + { + t = i * t; + } + return t; +} diff --git a/facto/facto.h b/facto/facto.h new file mode 100644 index 0000000..081f0b3 --- /dev/null +++ b/facto/facto.h @@ -0,0 +1,6 @@ +#ifndef FACTO_H +#define FACTO_H + +unsigned long facto(unsigned long n); + +#endif diff --git a/facto/main b/facto/main new file mode 100755 index 0000000..205128f Binary files /dev/null and b/facto/main differ diff --git a/facto/main.c b/facto/main.c new file mode 100644 index 0000000..a28e36e --- /dev/null +++ b/facto/main.c @@ -0,0 +1,12 @@ +#include +#include "facto.h" + +int main() +{ + unsigned long n = 20; + for(unsigned long i = 1; i <= n; i++) + { + printf("facto(%lu) = %lu\n",i,facto(i)); + } + return 0; +} diff --git a/fibo/fibo.c b/fibo/fibo.c new file mode 100644 index 0000000..40e36fc --- /dev/null +++ b/fibo/fibo.c @@ -0,0 +1,17 @@ +#include +#include "fibo.h" + +unsigned long fibo(unsigned long n) +{ + unsigned long first = 0; + unsigned long second = 1; + unsigned long t = 0; + while(n>0) + { + n--; + t = first + second; + first = second; + second = t; + } + return first; +} diff --git a/fibo/fibo.h b/fibo/fibo.h new file mode 100644 index 0000000..f31f271 --- /dev/null +++ b/fibo/fibo.h @@ -0,0 +1,6 @@ +#ifndef FIBO_H +#define FIBO_H + +unsigned long fibo(unsigned long n); + +#endif diff --git a/fibo/main b/fibo/main new file mode 100755 index 0000000..c5e6a58 Binary files /dev/null and b/fibo/main differ diff --git a/fibo/main.c b/fibo/main.c new file mode 100644 index 0000000..ba2eed6 --- /dev/null +++ b/fibo/main.c @@ -0,0 +1,18 @@ +#include +#include "fibo.h" + +int main() +{ + unsigned long n = 90; + for(unsigned long i = 0; i<=10; i++ ) + { + printf("fibo(%lu) = %lu\n",i,fibo(i)); + } + printf("...\n"); + for(unsigned long i = 81; i<= n; i++) + { + printf("fibo(%lu) = %lu\n",i,fibo(i)); + } + + return 0; +} diff --git a/isqrt/isqrt.c b/isqrt/isqrt.c new file mode 100644 index 0000000..99048ae --- /dev/null +++ b/isqrt/isqrt.c @@ -0,0 +1,13 @@ +#include +#include "isqrt.h" + +unsigned long isqrt(unsigned long n) +{ + unsigned long r = n; + while (r*r > n) + { + r = r + n/r; + r = r/2; + } + return r; +} diff --git a/isqrt/isqrt.h b/isqrt/isqrt.h new file mode 100644 index 0000000..f19555e --- /dev/null +++ b/isqrt/isqrt.h @@ -0,0 +1,6 @@ +#ifndef ISQRT_H +#define ISQRT_H + +unsigned long isqrt(unsigned long n); + +#endif diff --git a/isqrt/main b/isqrt/main new file mode 100755 index 0000000..2afd0ee Binary files /dev/null and b/isqrt/main differ diff --git a/isqrt/main.c b/isqrt/main.c new file mode 100644 index 0000000..e803639 --- /dev/null +++ b/isqrt/main.c @@ -0,0 +1,12 @@ +#include +#include "isqrt.h" + +int main() +{ + unsigned long n = 200; + for(unsigned long i = 0; i <= n; i+=8) + { + printf("isqrt(%lu) = %lu\n",i,isqrt(i)); + } + return 0; +} diff --git a/perfect_numbers/divisor_sum.h b/perfect_numbers/divisor_sum.h new file mode 100644 index 0000000..96586cb --- /dev/null +++ b/perfect_numbers/divisor_sum.h @@ -0,0 +1,6 @@ +#ifndef DIVISOR_SUM_H +#define DIVISOR_SUM_H + +unsigned long divisor_sum(unsigned long n); + +#endif diff --git a/perfect_numbers/divisor_sum.o b/perfect_numbers/divisor_sum.o new file mode 100644 index 0000000..39d44d2 Binary files /dev/null and b/perfect_numbers/divisor_sum.o differ diff --git a/perfect_numbers/is_perfect_number.c b/perfect_numbers/is_perfect_number.c new file mode 100644 index 0000000..95b9f62 --- /dev/null +++ b/perfect_numbers/is_perfect_number.c @@ -0,0 +1,11 @@ +#include +#include "is_perfect_number.h" +#include "divisor_sum.h" + +int is_perfect_number(unsigned long n) +{ + if(divisor_sum(n) == n) + return n; + return 0; +} + diff --git a/perfect_numbers/is_perfect_number.h b/perfect_numbers/is_perfect_number.h new file mode 100644 index 0000000..a42383d --- /dev/null +++ b/perfect_numbers/is_perfect_number.h @@ -0,0 +1,6 @@ +#ifndef IS_PERFECT_NUMBER_H +#define IS_PERFECT_NUMBER_H + +int is_perfect_number(unsigned long n); + +#endif diff --git a/perfect_numbers/main b/perfect_numbers/main new file mode 100755 index 0000000..410bc1b Binary files /dev/null and b/perfect_numbers/main differ diff --git a/perfect_numbers/main.c b/perfect_numbers/main.c new file mode 100644 index 0000000..62d6501 --- /dev/null +++ b/perfect_numbers/main.c @@ -0,0 +1,15 @@ +#include +#include "is_perfect_number.h" +#include "divisor_sum.h" + +int main() +{ + unsigned long n = 8128; + for(unsigned long i = 1; i<=n; i++) + { + int t = is_perfect_number(i); + if(t!=0) + printf("%i\n",is_perfect_number(i)); + } + return 0; +} diff --git a/power_of_two/main b/power_of_two/main new file mode 100755 index 0000000..6e8598a Binary files /dev/null and b/power_of_two/main differ diff --git a/power_of_two/main.c b/power_of_two/main.c new file mode 100644 index 0000000..2c3d7b6 --- /dev/null +++ b/power_of_two/main.c @@ -0,0 +1,12 @@ +#include +#include "power_of_two.h" + +int main() +{ + unsigned char n = 63; + for(unsigned char i = 0; i <= n; i++) + { + printf("powerof_two(%u) = %lu\n",i,power_of_two(i)); + } + return 0; +} diff --git a/power_of_two/power_of_two.c b/power_of_two/power_of_two.c new file mode 100644 index 0000000..39c3195 --- /dev/null +++ b/power_of_two/power_of_two.c @@ -0,0 +1,7 @@ +#include +#include "power_of_two.h" + +unsigned long power_of_two(unsigned char n) +{ + return 1ul << n; +} diff --git a/power_of_two/power_of_two.h b/power_of_two/power_of_two.h new file mode 100644 index 0000000..a21e6fb --- /dev/null +++ b/power_of_two/power_of_two.h @@ -0,0 +1,6 @@ +#ifndef POWER_OF_TWO_H +#define POWER_OF_TWO_H + +unsigned long power_of_two(unsigned char n); + +#endif