Cod sursa(job #542439)

Utilizator AndrewTheGreatAndrei Alexandrescu AndrewTheGreat Data 26 februarie 2011 13:27:05
Problema Sortari2 Scor 0
Compilator cpp Status done
Runda Romanian Master in Mathematics and Sciences 2011, Ziua 2 Marime 0.62 kb
#include <iostream>
#include <stdio.h>

using namespace std;

const int mod = 999017;
int N, actual, p, fact, vechi;
int main()
{
    freopen ("sortari2.in","r",stdin);
    freopen ("sortari2.out","w",stdout);
    scanf("%d",&N);

    actual = 1;
    vechi = -1;
    p = 1 << 1;
    fact = 1;
    int i;
    for(i = 2; i <= N; i++)
    {
        fact *= i;
        actual = p + vechi;
        fact %= mod;
        actual %= mod;
        vechi = actual;
        p = p << 1;
        p %= mod;
    }
    fact -= actual;
    while(fact < 0)
        fact += mod;

    printf("%d\n",fact);
    return 0;
}