subroutine Lagrange(x,y,n,x0,L)
implicit none
integer::n
real::x(n),y(n),d(n)
integer::i,j
real::x0,L,w,a
do i=1,n
d(i)=1
do j=0,n
if(i/=j)then
d(i)=d(i)*(x(i)-x(j))
end if
end do
end do
L=0
w=1
do i=1,n
a=x0-x(i)
w=a*w
a=y(i)/(a*d(i))
L=L+a
end do
L=w*L
return
end subroutine
program main
integer::n=3
real::x(3)=(/1.0,3.0,5.0/)
real::y(3)=(/1.5708,1.5719,1.5738/)
real::x0=3.5
real::L
call Lagrange(x,y,n,x0,L)
write(*,*)'L= ',L
stop
end program