#include<bits/stdc++.h>
using namespace std;
const int N =1e6+10;
priority_queue<pair<int,int>,vector<pair<int,int> >,greater<pair<int,int> > >q;
int ans[N],n,a[N],t1[N];
struct node
{
int v,w;
};
bool prime(int x)
{
if(x==2)
return true;
for(int i=2;i<sqrt(x);i++)
if(x%i==0)
return false;
return true;
}
vector<node> g[N<<1];
int dis[N],vis[N<<1],from[N];
void dijkstra(int s)
{
memset(vis,0,sizeof(vis));
for(int i=1;i<=n;i++)
dis[i]=INT_MAX;
dis[s]=0;
q.push(make_pair(0,s));
while(!q.empty())
{
int u=q.top().second;
q.pop();
if(t1[u]==0||!prime(u))
continue;
vis[u]=1;
for(int i=0;i<g[u].size();i++)
{
int v=g[u][i].v;
if(dis[v]>dis[u]+g[u][i].w)
{
from[v]=u;
dis[v]=dis[u]+g[u][i].w;
q.push(make_pair(dis[v],v));
}
}
}
}
int main()
{
//freopen(".in","r",stdin);
//freopen(".out","w",stdout);
cin>>n;
int maxx=-INT_MAX;
for(int i=1;i<=n;i++)
cin>>a[i],t1[a[i]]=i,maxx=max(maxx,a[i]);
for(int i=2;i<=maxx;i++)
for(int j=2;j<=maxx/i;j++)
g[i].push_back({i*j,1}),g[i*j].push_back({i,1});
int s,t;
cin>>s>>t;
s=a[s],t=a[t];
dijkstra(s);
cout<<dis[t]<<endl;
// if(dis[t]==INT_MAX)
// cout<<"-1"<<endl,exit(0);
// else
// {
// int sum=0;
// while(from[t]!=s)
// {
// sum++;
// ans[sum]=t1[t];
// t=from[t];
// }
// cout<<sum<<endl;
// cout<<s<<" ";
// for(int i=sum;i>=1;i--)
// cout<<ans[i]<<" ";
// cout<<endl;
// }
return 0;
}
rt,本人输出的dis是错的,但不知道怎么调了