problem 1-4
Problem 1:
#include <stdio.h> int main() { int n=0,i=0,j; while(i<997)n+=(i+=3); for(i=5;i<1000;i+=15)n+=((j=i+5)<1000)?i+j:i; printf("%d\n", n); }
Problem2:
#include <stdio.h> int main() { int n=0,t1=1,t2=2; while(t2 < 4000000) { n+=(t2%2==0)?t2:0; t2+=t1; t1=t2-t1; } printf("%d\n", n); }
Problem3:
#include <stdio.h> #include <stdlib.h> #define SIZE 10000 int main() { unsigned long long int *result=(long long int *)malloc(sizeof(long long int)*SIZE); unsigned long long int *primes=(long long int *)malloc(sizeof(long long int)*SIZE); long long int max=600851475143LL,n=5,i=2,j,k; primes[0]=2; primes[1]=3; for(;n*n < max;n+=2) { long long int f=1; for(k=1;k<i&&f;k++,f=1) { f*=n%primes[k]; } if(f) primes[i++]=n; } for(j=0,k=0;j<i;j++) { if((max%primes[j])==0) result[k++]=primes[j]; } for(j=0;j<k;j++) { printf("%lld ", result[j]); } printf("\n"); free(result); free(primes); return 0; }
Problem4:
#include <stdio.h> #include <math.h> int digits(int n) { int i=1,j=0; if(n==0) return 1; while(n>=i) i*=10,j+=1; return j; } int nth(int n, int i) { if(i==1) return n-(n/10)*10; return nth(n/10,i-1); } int isPalindrome(int n, int d_prev) { int i,j,d; if((d=digits(n))<d_prev-2) { if(n==0) return 1; for(i=0;i<d_prev-2-d;i++) { if(nth(n,1)!=0) return 0; n /= 10; } return isPalindrome(n,digits(n)+2); } if(d==1) return 1; if(d==2) { for(i=1;i<10;i++) if(i*11==n) return 1; return 0; } return ((i=nth(n,d))==(j=nth(n,1)))?isPalindrome((n-i*(int)pow(10,d-1)-j)/10,d):0; } int main() { int i,j,max=0; for(i=999;i>100;i--) { for(j=999;j>100;j--){ int n = i*j; if(isPalindrome(n,digits(n)+2)) max=(n>max)?n:max; } } printf("%d\n",max); }