コード例 #1
0
ファイル: 575H-Bots.cpp プロジェクト: DionysiosB/CodeForces
int main(){

    const ll MOD = 1e9 + 7;

    ll n; scanf("%lld", &n);
    std::vector<ll> fact(2 * n + 1, 1);
    for(ll p = 2; p <= 2 * n; p++){fact[p] = p * fact[p - 1] % MOD;}

    std::vector<ll> modInv(n + 2, 1);
    for(ll p = 2; p <= n + 1; p++){modInv[p] = (MOD - ((MOD / p) * modInv[MOD % p] % MOD)) % MOD;}

    ll cur(1), ans(0);
    for(ll k = 1; k <= n + 1; k++){
        cur *= ((n + k) * modInv[k] % MOD); cur %= MOD;
        ans += cur; ans %= MOD;
    }

    printf("%lld\n", ans);

    return 0;
}
コード例 #2
0
ファイル: SecretShare.cpp プロジェクト: PICCO-Team/picco
void SecretShare::computeLagrangeWeight(){
	mpz_t nom, denom, t1, t2, temp;
	mpz_init(nom);
	mpz_init(denom);
	mpz_init(t1);
	mpz_init(t2);
	mpz_init(temp);

	lagrangeWeight = (mpz_t*)malloc(sizeof(mpz_t) * peers);
	
	for(int i = 0; i < peers; i++)
		mpz_init(lagrangeWeight[i]);
	
	for(int peer = 0; peer < peers; peer++){
		int point = peer+1;
		mpz_set_ui(nom,1);
		mpz_set_ui(denom,1);

		for(int l = 0; l < peers; l++){
			if(l != peer){
				mpz_set_ui(t1, l+1);
				modMul(nom, nom, t1);
				mpz_set_ui(t2, point);
				modSub(temp, t1, t2);
				modMul(denom, denom, temp);
			}
		}
		modInv(temp, denom);
		modMul(lagrangeWeight[peer], nom, temp);
	}

	mpz_clear(nom); 
	mpz_clear(denom); 
	mpz_clear(t1); 
	mpz_clear(t2); 
	mpz_clear(temp); 
}
コード例 #3
0
ファイル: SecretShare.cpp プロジェクト: PICCO-Team/picco
void SecretShare::modInv(mpz_t* result, mpz_t* values, int size){
	for(int i = 0; i < size; i++)
		modInv(result[i],values[i]);
}
コード例 #4
0
ファイル: NCR.cpp プロジェクト: cjtoribio/Algorithms
	static Long divide(Long a, Long b)
	{
		return a * modInv(b, MOD) % MOD;
	}