problem 5

Problem 3 のコードの使い回しを行った.

#include <stdio.h>

#define SIZE 20

int main()
{
    unsigned int multiples[SIZE][2];
    unsigned int primes[SIZE];
    int result=1,max=20,n=4,i=2,j=0,k;
    primes[0]=2;
    primes[1]=3;
    for(;n <= max;n+=1) {
        int f=1;
        for(k=0;k<i&&f;k++) {
            f=1;
            f*=n%primes[k];
        }
        if(f) primes[i++]=n;
        else {
            f=1;
            for(k=i-1;k>=0&&f;k--) {
                f=1;
                f*=n%primes[k];
            }
            multiples[j][0]=n;
            multiples[j++][1]=n/primes[k+1];
        }
    }
    for(k=0;k<i;k++) {
        result *= primes[k];
    }
    for(k=0;k<j;k++) {
        result *= (result%multiples[k][0])?multiples[k][1]:1;
    }
    printf("%d\n", result);
    return 0;
}