3249 - sumimp3
Cerința[edit | edit source]
Se citește un număr natural n
. Calculați și afișați câte din submulțimile mulțimii {1, 2, ..., n}
sunt formate dintr-un număr impar de elemente. Datorită faptului că există foarte multe submulțimi, rezultatul trebuie calculat modulo 9001
.
Date de intrare[edit | edit source]
Programul citește de la tastatură numărul n
.
Date de ieșire[edit | edit source]
Programul va afișa pe ecran numărul de submulțimi formate din număr impar de elemente, modulo 9001
.
Restricții și precizări[edit | edit source]
1 ≤ n ≤ 2.000.000.000
Exemplu:[edit | edit source]
Intrare
4
Ieșire
8
Explicație[edit | edit source]
Submulțimile mulțimii {1, 2, ..., n}
care sunt formate dintr-un număr impar de elemente sunt {1}
, {1,2,3}
, {1,2,4}
, {1,3,4}
, {2}
, {2,3,4}
, {3}
, {4}
.
Rezolvare[edit | edit source]
<syntaxhighlight lang="python3"> MOD = 9001
def count_odd_subsets(n):
dp = [[0 for _ in range(n + 1)] for _ in range(n + 1)]
dp[0][0] = 1 dp[i][0] = 0
for i in range(1, n + 1): for j in range(i + 1): if j == 0: dp[i][j] = dp[i - 1][j] else: dp[i][j] = (dp[i - 1][j - 1] + dp[i - 1][j]) % MOD
odd_subsets = 0 for j in range(n + 1): if j % 2 == 1: odd_subsets += dp[n][j]
return odd_subsets % MOD
def main():
n = int(input()) odd_subsets_count = count_odd_subsets(n) print(odd_subsets_count)
if __name__ == "__main__":
main()
</syntaxhighlight>