From 1eefd58ca4fdb5d2f51f657bfd70c9a89a4707db Mon Sep 17 00:00:00 2001 From: Iru Cai Date: Thu, 24 May 2018 21:39:58 +0800 Subject: initial commit --- euler10.c | 29 +++++++++++++++++ euler10.scm | 13 ++++++++ euler102.c | 72 +++++++++++++++++++++++++++++++++++++++++ euler11.c | 46 ++++++++++++++++++++++++++ euler114.scm | 14 ++++++++ euler12.scm | 41 +++++++++++++++++++++++ euler13.scm | 104 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ euler14.scm | 28 ++++++++++++++++ euler16.scm | 9 ++++++ euler17.c | 68 ++++++++++++++++++++++++++++++++++++++ euler18.c | 43 ++++++++++++++++++++++++ euler19.c | 31 ++++++++++++++++++ euler2.scm | 10 ++++++ euler20.scm | 16 +++++++++ euler21.c | 52 ++++++++++++++++++++++++++++++ euler22.c | 17 ++++++++++ euler23.c | 49 ++++++++++++++++++++++++++++ euler26.scm | 30 +++++++++++++++++ euler27.c | 45 ++++++++++++++++++++++++++ euler29.c | 31 ++++++++++++++++++ euler39.c | 38 ++++++++++++++++++++++ euler4.scm | 20 ++++++++++++ euler41.sh | 3 ++ euler44.c | 58 +++++++++++++++++++++++++++++++++ euler60.c | 68 ++++++++++++++++++++++++++++++++++++++ euler7.scm | 16 +++++++++ euler8.c | 20 ++++++++++++ euler99.c | 41 +++++++++++++++++++++++ 28 files changed, 1012 insertions(+) create mode 100644 euler10.c create mode 100644 euler10.scm create mode 100644 euler102.c create mode 100644 euler11.c create mode 100644 euler114.scm create mode 100644 euler12.scm create mode 100644 euler13.scm create mode 100644 euler14.scm create mode 100644 euler16.scm create mode 100644 euler17.c create mode 100644 euler18.c create mode 100644 euler19.c create mode 100644 euler2.scm create mode 100644 euler20.scm create mode 100644 euler21.c create mode 100644 euler22.c create mode 100644 euler23.c create mode 100644 euler26.scm create mode 100644 euler27.c create mode 100644 euler29.c create mode 100644 euler39.c create mode 100644 euler4.scm create mode 100644 euler41.sh create mode 100644 euler44.c create mode 100644 euler60.c create mode 100644 euler7.scm create mode 100644 euler8.c create mode 100644 euler99.c diff --git a/euler10.c b/euler10.c new file mode 100644 index 0000000..7d9d16b --- /dev/null +++ b/euler10.c @@ -0,0 +1,29 @@ +#include +#define MAX 2000000 + +int table[MAX+1]={0}; +int primes[MAX]; + +int main() +{ + int nPrimes,i,j; + long long sum=0; + for (i=2;i<=MAX;++i){ + if (table[i]==0){ + primes[nPrimes]=i; + nPrimes++; + sum+=i; + } + //sieve + for (j=2;j<=primes[nPrimes-1];++j){ + if (i*j>MAX) + break; + else + table[i*j]=1; + } + } + printf("%lld\n",sum); + return 0; +} + + diff --git a/euler10.scm b/euler10.scm new file mode 100644 index 0000000..3ae17f2 --- /dev/null +++ b/euler10.scm @@ -0,0 +1,13 @@ +(load "../sicp/chapter01/miller-rabin.scm") + +(define (sum-primes limit) + (define (sum-iter s l) + (cond ((>= l limit) s) + ((prime? l 5) + (sum-iter (+ s l) (+ l 2))) + (else (sum-iter s (+ l 2))))) + (sum-iter 2 3)) + +(display (sum-primes (read))) +(newline) +(exit) diff --git a/euler102.c b/euler102.c new file mode 100644 index 0000000..272a54a --- /dev/null +++ b/euler102.c @@ -0,0 +1,72 @@ +#include +#include + +typedef struct +{ + int a[2],b[2],c[2]; +} triangle; + +static inline void +vsub(int d[], int s[], int t[]) +{ + d[0] = s[0] - t[0]; + d[1] = s[1] - t[1]; +} + +static int +ext_product(int s[], int t[]) +{ + return s[0] * t[1] - s[1] * t[0]; +} + +static int sign(int x) +{ + if (x < 0) + return -1; + if (x > 0) + return 1; + return 0; +} + +bool o_in_tri(triangle *t) +{ + int ab[2], ac[2], bc[2]; + + vsub(ab, t->b, t->a); + vsub(ac, t->c, t->a); + vsub(bc, t->c, t->b); + + /* sig(ABxAC) = sig(OBxOC) */ + int sabc = sign(ext_product(ab, ac)); + int sobc = sign(ext_product(t->b, t->c)); + if (sabc != sobc) + return false; + + /* sig(BAxBC) = sig(OAxOC) */ + int sbac = sign(ext_product(bc, ab)); + int soac = sign(ext_product(t->a, t->c)); + if (sbac != soac) + return false; + + /* sig(CAxCB) = sig(OAxOB) */ + int scab = sign(ext_product(ac, bc)); + int soab = sign(ext_product(t->a, t->b)); + if (scab != soab) + return false; + + return true; +} + +int main() +{ + triangle t; + int n = 0; + /* the data uses ',' to split the integers, process it with + * sed 's/,/ /g' first. */ + while (scanf("%d%d%d%d%d%d", &t.a[0], &t.a[1], &t.b[0], &t.b[1], + &t.c[0], &t.c[1]) != EOF) { + if (o_in_tri(&t)) + n++; + } + printf("%d\n", n); +} diff --git a/euler11.c b/euler11.c new file mode 100644 index 0000000..ea43b48 --- /dev/null +++ b/euler11.c @@ -0,0 +1,46 @@ +#include +#define MAX 20 + +int grid[MAX][MAX]; +int biggest[MAX][MAX]; + +int main() +{ + int i,j,M=0; + for (i=0;ibiggest[i][j]) + biggest[i][j]=p; + if (ibiggest[i][j]) + biggest[i][j]=p; + } + if (i>=3){ + p = grid[i][j]*grid[i-1][j+1]* + grid[i-2][j+2]*grid[i-3][j+3]; + if (p>biggest[i][j]) + biggest[i][j]=p; + } + } + if (biggest[i][j]>M) + M=biggest[i][j]; + } + } + printf("%d\n",M); + return 0; +} + diff --git a/euler114.scm b/euler114.scm new file mode 100644 index 0000000..e23b441 --- /dev/null +++ b/euler114.scm @@ -0,0 +1,14 @@ +(define (comb m n) + (define (citer mm nn prod) + (if (> mm m) prod + (citer (+ mm 1) (- nn 1) (/ (* prod nn) mm)))) + (citer 1 n 1)) + +(define (solve nn) + (define (addto m n) + (if (> m n) 0 + (+ (comb m n) (addto (+ m 2) (- n 2))))) + (+ 1 (addto 2 (- nn 1)))) + +(display (solve 50)) +(newline) diff --git a/euler12.scm b/euler12.scm new file mode 100644 index 0000000..e0d726f --- /dev/null +++ b/euler12.scm @@ -0,0 +1,41 @@ +(define (square x) (* x x)) +(define (power x n) + (if (= n 0) + 1 + (* x (power x (- n 1))))) + +(define (first-divisor x) + (define (try-iter d) + (cond ((= 0 (remainder x d)) d) + ((> (square d) x) x) + (else (try-iter (+ d 1))))) + (try-iter 2)) + +(define (divexp x d) + (if (= (remainder x d) 0) + (+ (divexp (/ x d) d) 1) + 0)) + +(define (ndiv n) + (define (pair d) + (cons (divexp n d) (/ n (expt d (divexp n d))))) + (if (= n 1) 1 + (let ((fd (first-divisor n))) + (* (+ 1 (car (pair fd))) + (ndiv (cdr (pair fd))))))) + +(define (kth-factor-triangle-over-n n) + (define (n-fac-tri n) + (if (even? n) + (* (ndiv (/ n 2)) (ndiv (+ n 1))) + (* (ndiv n) (ndiv (/ (+ n 1) 2))))) + (define (try-iter i) + (if (> (n-fac-tri i) n) + i + (try-iter (+ i 1)))) + (try-iter 1)) + +(display + ((lambda (x) (/ (* x (+ x 1)) 2)) + (kth-factor-triangle-over-n 500))) +(newline) diff --git a/euler13.scm b/euler13.scm new file mode 100644 index 0000000..f4246e9 --- /dev/null +++ b/euler13.scm @@ -0,0 +1,104 @@ +(display + (+ + 371072875339 + 463769376774 + 743249861995 + 919422133635 + 230675882075 + 892616706966 + 281128798128 + 442742289174 + 474514457360 + 703864861058 + 621764571418 + 649063524627 + 925758677183 + 582035653253 + 801811993848 + 353986643728 + 865155060062 + 716938887077 + 543700705768 + 532826541087 + 361232725250 + 458765761724 + 174237069058 + 811426604180 + 519343254517 + 624672216484 + 157324443869 + 550376875256 + 183363848253 + 803862875928 + 781828337579 + 167263201004 + 484030981290 + 870869875513 + 599594068957 + 697939506796 + 410526847082 + 653786073615 + 358290353174 + 949537597651 + 889028025717 + 252676802760 + 362702185404 + 240744869082 + 914302881971 + 344130655780 + 230530811728 + 114876969321 + 637832994906 + 677201869716 + 955482553002 + 760853271322 + 377742425354 + 237019132757 + 297988602722 + 184957014548 + 382982037830 + 348295438291 + 409579530664 + 297461521855 + 416981162220 + 624679571944 + 231897067725 + 861880882258 + 113067397083 + 829591747671 + 976233310448 + 428462801835 + 551216035469 + 322381957343 + 755061649651 + 621778427521 + 329241857071 + 995186714302 + 732674608005 + 768418225246 + 971426179103 + 877836461827 + 108488025216 + 713296124747 + 621840735723 + 666278919814 + 606618262936 + 857869440895 + 660243964099 + 649139826800 + 167309393198 + 948093772450 + 786391670211 + 153687137119 + 407899231155 + 448899115014 + 415031288803 + 812348806732 + 826165707739 + 229188020587 + 771585425020 + 721078384350 + 208496039801 + 535035342264 + )) +(newline) diff --git a/euler14.scm b/euler14.scm new file mode 100644 index 0000000..3adc07a --- /dev/null +++ b/euler14.scm @@ -0,0 +1,28 @@ +(define (chainlen n) + (define (next m) + (if (even? m) + (/ m 2) + (+ (* m 3) 1))) + (define (count-iter cur cnt) + (if (= cur 1) + cnt + (count-iter (next cur) (+ cnt 1)))) + (count-iter n 1)) + +(define (find-max-len-start limit) + (define (try cur longest ans) + (cond ((> cur limit) ans) + ((= (remainder (- cur 4) 6) 0) + ;it's even and is 3n+1=>it's 6n+4 + (try (+ cur 1) longest ans)) + (else + (let ((len (chainlen cur)) + (curn (+ cur 1))) + (if (> len longest) + (try curn len cur) + (try curn longest ans)))))) + (let ((lowest (ceiling (/ limit 2)))) + (try lowest 1 lowest))) + +(display (find-max-len-start 999999)) +(newline) diff --git a/euler16.scm b/euler16.scm new file mode 100644 index 0000000..0260783 --- /dev/null +++ b/euler16.scm @@ -0,0 +1,9 @@ +(define (sum-digits n) + (if (= n 0) + 0 + (+ (remainder n 10) + (sum-digits (floor (/ n 10)))))) + +(display (sum-digits (expt 2 1000))) +(newline) + diff --git a/euler17.c b/euler17.c new file mode 100644 index 0000000..f6def67 --- /dev/null +++ b/euler17.c @@ -0,0 +1,68 @@ +#include +#include +#include + +const char* num_en[]={ + "", + "one", "two", "three", "four", + "five", "six", "seven", "eight", + "nine", "ten", "eleven", "twelve", + "thirteen", "fourteen", "fifteen", "sixteen", + "seventeen", "eighteen", "nineteen", "twenty", + "thirty", "forty", "fifty", "sixty", + "seventy", "eighty", "ninety"}; + +void name_num(int num,char* name) +{ + name[0]=0; + if (num>=1000){ + strcat(name,num_en[num/1000]); + strcat(name," thousand "); + num %= 1000; + if (num>0 && num<100) + strcat(name,"and "); + } + if (num>=100){ + strcat(name,num_en[num/100]); + strcat(name," hundred "); + num %= 100; + if (num>0){ + strcat(name,"and "); + } + } + if (num>20){ + strcat(name,num_en[20-2+num/10]); + num %= 10; + if (num>0) + strcat(name,"-"); + strcat(name,num_en[num%10]); + }else{ + strcat(name,num_en[num]); + } +} + +int count_letters(char* s) +{ + char *p; + int count=0; + for (p=s; *p; ++p){ + if (islower(*p)){ + ++count; + } + } + return count; +} + +int main() +{ + int n,i,len,total_len=0; + char num_en[100]; + for (i=1;i<=1000;++i){ + name_num(i,num_en); + len = count_letters(num_en); + total_len += len; + //printf("%s %d\n",num_en,len); + } + printf("%d\n",total_len); + return 0; +} diff --git a/euler18.c b/euler18.c new file mode 100644 index 0000000..281dc77 --- /dev/null +++ b/euler18.c @@ -0,0 +1,43 @@ +#include +#define MAX 15 + +int max(int i,int j) +{ + if (i>j) + return i; + else + return j; +} + +int main() +{ + int triangle[MAX][MAX]; + int answer[MAX][MAX]; + int maxtotal=0; + int i,j; + for (i=0; imaxtotal){ + maxtotal=answer[i][j]; + } + } + } + printf("%d\n",maxtotal); + return 0; +} + + diff --git a/euler19.c b/euler19.c new file mode 100644 index 0000000..78a9d55 --- /dev/null +++ b/euler19.c @@ -0,0 +1,31 @@ +#include + +const int days[2][12]={ + {31,28,31,30,31,30,31,31,30,31,30,31}, + {31,29,31,30,31,30,31,31,30,31,30,31}}; + +int isleap(int y) +{ + if (y%4==0 && (y%100!=0 || y%400==0)) + return 1; + else + return 0; +} + +int main() +{ + int y,m,t; + int d=1+365,count=0; + for (y=1901;y<=2000;++y){ + t=isleap(y); + for (m=0;m<12;++m){ + d%=7; + if (d==0) + ++count; + d+=days[t][m]; + } + } + printf("%d\n",count); + return 0; +} + diff --git a/euler2.scm b/euler2.scm new file mode 100644 index 0000000..f47cad2 --- /dev/null +++ b/euler2.scm @@ -0,0 +1,10 @@ +(define (sum-fib sum a b c) + (if (> a 4000000) + sum + (if (even? a) + (sum-fib (+ sum a) b c (+ b c)) + (sum-fib sum b c (+ b c))))) + +(display (sum-fib 0 1 2 3)) +(newline) + diff --git a/euler20.scm b/euler20.scm new file mode 100644 index 0000000..df06c9d --- /dev/null +++ b/euler20.scm @@ -0,0 +1,16 @@ +(define (sum-digits n) + (if (= n 0) + 0 + (+ (remainder n 10) + (sum-digits (floor (/ n 10)))))) + +(define (! n) + (define (p-iter i p) + (if (> i n) + p + (p-iter (+ i 1) (* p i)))) + (p-iter 1 1)) + +(display (sum-digits (! 100))) +(newline) + diff --git a/euler21.c b/euler21.c new file mode 100644 index 0000000..d18e556 --- /dev/null +++ b/euler21.c @@ -0,0 +1,52 @@ +#include +#include +#define MAX 9999 + +int firstdiv(int n) +{ + int i; + int q=ceil(sqrt(n)); + for (i=2;i<=q;++i){ + if (n%i==0) + return i; + } + return n; +} + +int divexp(int n,int d) +{ + int dd=1; + while (n%d==0){ + n/=d; + dd*=d; + } + return dd; +} + +int sumdiv(int n) +{ + if (n==1) + return 1; + + int fd=firstdiv(n); + int fdexp=divexp(n,fd); + return sumdiv(n/fdexp)*(fdexp*fd-1)/(fd-1); +} + +int main() +{ + int d[MAX+1],i,sum=0; + for (i=1;i<=MAX;++i){ + d[i]=sumdiv(i)-i; + } + for (i=1;i<=MAX;++i){ + if (iMAX && sumdiv(d[i])-d[i]==i){ + sum+=i; + } + } + printf("%d\n",sum); + return 0; +} + diff --git a/euler22.c b/euler22.c new file mode 100644 index 0000000..d969fe7 --- /dev/null +++ b/euler22.c @@ -0,0 +1,17 @@ +#include + +int main() +{ + char name[10]; + int i,j,score=0; + for (i=1;scanf("%s",name)!=EOF;++i){ + int worth=0; + for (j=0;name[j];++j){ + worth+=name[j]&0xbf; + } + score+=worth*i; + } + printf("%d\n",score); + return 0; +} + diff --git a/euler23.c b/euler23.c new file mode 100644 index 0000000..bac7b08 --- /dev/null +++ b/euler23.c @@ -0,0 +1,49 @@ +#include +#define MAX 100000 + +int sum_of_div(int n) +{ + int fd,fdsum=1,sum=1; + while (n%2==0){ + fdsum<<=1; + n>>=1; + } + sum *= (fdsum*2-1); + fd = 3; + while (n>1){ + fdsum=1; + while (n%fd==0){ + fdsum*=fd; + n/=fd; + } + sum *= (fdsum*fd-1)/(fd-1); + fd += 2; + } + return sum; +} + +int main() +{ + int n,i,j; + int abundant[MAX]; + int sum_abundant[MAX]={0}; + int ans=0; + for (i=1;i<=28123;++i){ + if (sum_of_div(i)>i*2){ + abundant[i]=1; + for (j=1;j<=i&&j<=28123-i;++j){ + if (abundant[j]){ + sum_abundant[i+j]=1; + } + } + }else{ + abundant[i]=0; + } + } + for (int i=1;i<=28123;++i){ + if (!sum_abundant[i]) + ans+=i; + } + printf("%d\n",ans); +} + diff --git a/euler26.scm b/euler26.scm new file mode 100644 index 0000000..6c01409 --- /dev/null +++ b/euler26.scm @@ -0,0 +1,30 @@ +(define (recur-cycle n) + (define (div_2_5 x) + (cond + ((= (remainder x 2) 0) + (div_2_5 (/ x 2))) + ((= (remainder x 5) 0) + (div_2_5 (/ x 5))) + (else x))) + (define (try-iter m r) + (if (= r 1) + m + (try-iter (+ m 1) (remainder (* r 10) n)))) + (if (= (div_2_5 n) n) + (if (= n 1) + 0 + (try-iter 1 (remainder 10 n))) + (recur-cycle (div_2_5 n)))) + +(define (longest upper) + (define (try-iter n ans anscycle) + (if (> n upper) + ans + (let ((m (recur-cycle n))) + (if (> m anscycle) + (try-iter (+ n 1) n m) + (try-iter (+ n 1) ans anscycle))))) + (try-iter 1 1 0)) + +(display (longest (read))) +(newline) diff --git a/euler27.c b/euler27.c new file mode 100644 index 0000000..f2c2435 --- /dev/null +++ b/euler27.c @@ -0,0 +1,45 @@ +#include +#include +#define MAX 3000000 + +int notPrime[MAX]={0}; + +void genprimes(int n) +{ + notPrime[0]=1; + notPrime[1]=1; + int i,j; + for (i=2;i<=n;++i){ + if (!notPrime[i]){ + for (j=i*2;j<=n;j+=i){ + notPrime[j]=1; + } + } + } +} + +int main() +{ + int a,b,n; + int product=0,longest=0; + genprimes(MAX); + for (a=-999;a<=999;a+=2){ + for (b=-997;b<=997;b+=2){ + if (notPrime[abs(b)]) + continue; + for (n=0;;++n){ + int t=(n+a)*n+b; + if (notPrime[abs(t)]){ + if (n>longest){ + longest = n; + product = a*b; + } + break; + } + } + } + } + printf("%d\n",product); + return 0; +} + diff --git a/euler29.c b/euler29.c new file mode 100644 index 0000000..a9e5fc5 --- /dev/null +++ b/euler29.c @@ -0,0 +1,31 @@ +#include +#define LIMIT 4 + +int d[LIMIT+1][LIMIT+1]={}; +int count=(LIMIT-1)*(LIMIT-1); + +int main() +{ + int a,b,c; + for (a=2;a<=LIMIT;a++){ + int bb=a; + for (b=2;b<=LIMIT;b++){ + bb*=a; + if (bb>LIMIT) break; + for (c=2;c<=LIMIT/b;c++){ + d[bb][c]=1; // (a^b)^c = a^(bc) + } + } + } + for (a=2;a<=LIMIT;a++){ + for (b=2;b<=LIMIT;b++){ + if (d[a][b]){ + printf("%d %d\n",a,b); + --count; + } + } + } + printf("%d\n",count); + return 0; +} + diff --git a/euler39.c b/euler39.c new file mode 100644 index 0000000..e4cd40c --- /dev/null +++ b/euler39.c @@ -0,0 +1,38 @@ +#include + +int np(int p) +{ + int n = 0; + int a; + + /* p = a + b + c, with a*a+b*b=c*c */ + /* b = (p*p-2pa)/(2p-2a) */ + if (p % 2 == 1) + return 0; + + a = 1; + while (1) { + int nu = p * (p - a*2); + int de = (p - a) * 2; + if (nu % de == 0 && nu/de > a) + n++; + if (nu/de < a) + break; + a++; + } + return n; +} + +int main() +{ + int bestp, M = 0; + int i; + for (i = 3; i<=1000; i++) { + int m = np(i); + if (m > M) { + bestp = i; + M = m; + } + } + printf("%d\n", bestp); +} diff --git a/euler4.scm b/euler4.scm new file mode 100644 index 0000000..09408a9 --- /dev/null +++ b/euler4.scm @@ -0,0 +1,20 @@ +(define (palindrome? x) + (define (rev x ans) + (if (= x 0) + ans + (let ((r (remainder x 10))) + (rev (/ (- x r) 10) (+ r (* ans 10)))))) + (= (rev x 0) x)) + +(define (bigpal ans x y) + (if (> x 999) + ans + (if (> y 999) + (bigpal ans (+ x 1) (+ x 1)) + (if (and (palindrome? (* x y)) (> (* x y) ans)) + (bigpal (* x y) x (+ y 1)) + (bigpal ans x (+ y 1)))))) + +(display (bigpal 0 100 100)) +(newline) + diff --git a/euler41.sh b/euler41.sh new file mode 100644 index 0000000..133d894 --- /dev/null +++ b/euler41.sh @@ -0,0 +1,3 @@ +# Pandigital prime is at most 7 digits, because 1+...+8 and 1+...+9 is multiply of 3 +for i in 76{1..5}{1..5}{1..5}{1..5}{1,3,5} ; do factor $i; done | sed -e '/[0-9] /d' | cut -d':' -f1 \ + | sed $(for i in {1..7} ; do printf '\x2de /%d.*%d/d ' $i $i ; done) diff --git a/euler44.c b/euler44.c new file mode 100644 index 0000000..db032aa --- /dev/null +++ b/euler44.c @@ -0,0 +1,58 @@ +#include +#include + +long long Pn(int n) +{ + return (long long)n*(long long)(3*n-1)/2; +} + +#define MAXSIZE (1<<22) +long long P[MAXSIZE]; + +int comp(const void *a, const void *b) +{ + long long aa = *(long long*)a; + long long bb = *(long long*)b; + if (aa < bb) + return -1; + if (aa > bb) + return 1; + return 0; +} + +int main() +{ + int i, j; + int range = (1<<15); + for (i = 1; i < range; i++) + P[i] = Pn(i); + + /* i < 257 is impossible when searching with range=(1<<15) */ + /* i < 725 is impossible with range=(1<<18) */ + /* i < 1449 is impossible with range=(1<<20) */ + for (i = 1; i < range; i++) { + long long diff = P[i]; + for (j = 1; j < range - 1; j++) { + long long Pj = P[j]; + long long Pk = Pj + diff; + long long Pjk = Pj + Pk; + if (Pk < P[j+1]) + break; + while (Pjk > P[range-1]) { + int newrange = range * 2; + int r; + for (r = range; r < newrange; r++) + P[r] = Pn(r); + range = newrange; + } + if (!bsearch(&Pk, P+1, range-1, sizeof(long long), comp)) + continue; + if (!bsearch(&Pjk, P+1, range-1, sizeof(long long), comp)) + continue; + printf("i = %d, D = %lld, j = %d, P[j] = %lld\n", i, diff, j, Pj); + /* i = 1912, D = 5482660, j = 1020, P[j] = 1560090 */ + return 0; + } + printf("i = %d\n", i); + } +} diff --git a/euler60.c b/euler60.c new file mode 100644 index 0000000..3bc933c --- /dev/null +++ b/euler60.c @@ -0,0 +1,68 @@ +#include +#define NP 10000 + +int primetab[NP]; + +void genprimes() +{ + int i=2,j; + primetab[0] = 2; + primetab[1] = 3; + + while (ibestsum) return; + + if (depth==0) { + result[0] = 1; + } else { + result[depth] = result[depth-1]+1; + } + if (result[depth]>=NP) { + return; + } + + while (result[depth] + +int main() +{ + int greatest=0,t; + char a[1100]; + int d[1100],i; + scanf("%s",a); + for (i=0;i<4;++i) + d[i]=a[i]-'0'; + for (i=4;a[i];++i){ + d[i]=a[i]-'0'; + t=d[i]*d[i-1]*d[i-2]*d[i-3]*d[i-4]; + if (t>greatest) + greatest=t; + } + printf("%d\n",greatest); + return 0; +} + diff --git a/euler99.c b/euler99.c new file mode 100644 index 0000000..e337796 --- /dev/null +++ b/euler99.c @@ -0,0 +1,41 @@ +#include +#include +#include +#include + +struct elem +{ + int idx; + double v; +}; + +int comp(const void *s, const void *t) +{ + struct elem *ss = (struct elem*)s; + struct elem *tt = (struct elem*)t; + if (ss->v < tt->v) + return -1; + if (ss->v > tt->v) + return 1; + return 0; +} + +int main() +{ + struct elem arr[100000]; + int n; + char buffer[1000]; + + n = 0; + while (fgets(buffer, 1000, stdin)) { + if (strlen(buffer) < 3) + break; + int a = atoi(buffer); + int b = atoi(strchr(buffer, ',')+1); + arr[n].idx = n + 1; + arr[n].v = b * log(a); + n ++; + } + qsort(arr, n, sizeof(arr[0]), comp); + printf("%d\n", arr[n-1].idx); +} -- cgit v1.2.3