Soit $(u_n)$ la suite définie par la relation de récurrence $u_n= 2u_{n-1}+3 u_{n-2}$ et les conditions initiales $u_0=1$, $u_1=0$.
def u(n):
if n==0: return 1
elif n==1: return 0
else: return 2*u(n-1)+3*u(n-2)
for i in range(12): print (u(i), end=' ')
On écrit $$ U(x) =\sum_{n\ge 0}u_nx^n = 1 + 0\cdot x + \sum_{n\ge 2}u_nx^n =1+2x(U(x)-1)+ 3x^2U(x) $$ d'où $(1-2x-3x^2)U(x) = 1-2x$ et finalement $$ U(x)=\frac{1-2x}{1-2x-3x^2} = \frac{1-2x}{(1+x)(1-3x)}=\frac14\frac{1}{1-3x}+\frac34\frac{1}{1+x} $$ ce qu'on vérifie avec sympy :
from sympy import *
var('x')
U=(1-2*x)/(1-2*x-3*x**2)
U.apart()
On a donc deux séries géométriques : $$ U(x)= \frac14\sum_{n\ge 0}(3x)^n+\frac34\sum_{n\ge 0}(-x)^n = \sum_{n\ge 0}\frac{3^n+3(-1)^n}{4}x^n $$
def test(n):
return (3**n+3*(-1)**n)//4
for i in range(12): print (test(i), end=' ')
On trouve la suite 0,1,1,3,11 ...
Si le coefficient de $x^n$ dans $A(x)$ est le nombre d'arbres plans réduits à $n$ feuilles, le coefficient de $x^n$ dans $A(x)^k$ est le nombre de tels arbres dont la racine a exactement $k$ sous-arbres. Donc,
$$A(x)=x+A(x)^2+A(x)^3+\cdots = x + \frac{A(x)^2}{1-A(x)} $$qui se ramène à une équation du second degré en chassant le dénominateur : $$ A(x)(1-A(x))= x(1-A(x))+A(x)^2 $$ soit $$ 2A(x)^2-(1+x)A(x)+x = 0 $$ Le discriminant est $$ \Delta = (1+x)^2-8x = 1-6x+x^2 $$ et la solution qui commence par 1 est $$ A(x)=\frac{1+x-\sqrt{1-6x+x^2}}{4} $$
A = (1+x-sqrt(1-6*x+x**2))/4
series(A,x,0,10)
Soit $(a_n)$ la suite définie par $a_0=1,a_1=1$ et la relation de récurrence $a_{n+2}=2a_{n+1}-a_n+1$.
def a(n):
if n<2: return 1
else: return 2*a(n-1)-a(n-2)+1
for n in range(12): print (a(n), end=' ')
donc $$ (1-2x+x^2)A(x) = 1-x+\frac{x^2}{1-x} $$ et $$ A(x)= \frac1{1-x}+\frac{x^2}{(1-x)^3} $$
A = 1/(1-x)+x**2/(1-x)**3
series(A,x,0,12)
On a donc $$ a_n = 1+ (-1)^{n-2}{-3\choose n-2} = 1+{3+n-2-1\choose n-2}=1+{n\choose n-2} = 1+\frac{n(n-1)}{2} $$
def f(n):
return 1+n*(n-1)//2
for i in range(12): print (f(i), end=' ')
# Vous avez codé cette fonction mais sympy la connaissait (sous un autre nom)
gcdex(1818,234)
4*1818-31*234
gcdex(79,107)
(42*79 ) % 107
Trouver le plus petit entier $x>0$ vérifiant simultanément les congruences $$ \left\{\matrix{x & \equiv & 2 \mod & 5 \cr x & \equiv & 3 \mod & 7 \cr x & \equiv & 2\mod & 11 \cr x & \equiv & 1 \mod & 19}\right. $$
def inversemod(a, n):
x, y, g = gcdex(a, n)
if g != 1:
raise ZeroDivisionError(a,n)
assert g == 1, "a doir etre premier avec n."
return x%n
from functools import reduce
def solve_chinese(yy,mm):
assert len(yy) == len(mm), "Arguments must have same length."
k = len(yy); m = reduce(lambda x,y:x*y, mm); x=0
for i in range(k):
u = reduce(lambda x,y:x*y, [mm[j] for j in range(k) if j!=i])
v = inversemod(u,mm[i])
x = (x + yy[i]*v*u) % m
return x
solve_chinese([2,3,2,1],[5,7,11,19])
Prouver que $2^{70}+3^{70}$ est divisible par 13.
Il faut montrer que $2^{70}+3^{70}\equiv 0\ [13]$, donc calculer $2^{70}$ et $3^{70}$ modulo 13. Comme 13 est premier, tout entier non divisible par 13 vérifie $a^{12}\equiv 1\ [13]$.
On a $70\equiv 10 \mod 12$ donc $2^{70}+3^{70}\equiv 2^{10}+3^{10} \mod 13$. On a $2^5=32\equiv 6$ donc $2^{10}\equiv 36 \equiv 10\mod 13$ et $3^3=27\equiv 1 \mod 13$ donc $3^{10}\equiv 3$. Maintenant, $10+3=13$ ...