#include<iostream>
#include<math.h>
#include<limits>
using namespace std;
int gcd(int a,int b)
{
if(b==0)
{
return a;
}
else
{
return gcd(b,a%b);
}
}
int getvalue(int a,int b)
{
int gccd=gcd(a,b);
return (a/gccd)*(b/gccd)*gccd;
}
long long a[2022][2022];//记录边的权值
int b[2022][2022]={0};//判断有没有边
int main()
{
int i,j;
for(i=1;i<2022;i++)//边图的初始化
{
for(j=i+1;j<2022;j++)
{
if(j-i<=21)
{
a[i][j]=a[j][i]=getvalue(i,j);
b[i][j]=b[j][i]=1;
}
if(j-i>21)
{
break;
}
}
}
long dis[2022];
for(i=2;i<2022;i++)
{
dis[i]=INT_MAX;
}
dis[1]=0;
int k;
for(k=1;k<2021;k++)
{
int cheak=0;
for(i=1;i<=2021;i++)
{
for(j=1;j<=2021;j++)
{
if(b[i][j]==1)
{
if(dis[j]>(dis[i]+a[i][j]))
{
dis[j]=dis[i]+a[i][j];
cheak=1;
}
}
}
}
if(cheak==0)
{
break;
}
}
cout<<dis[2021];
}
结果是
10266837