WLD likes playing with a sequence a[1..N]a[1..N]. One day he is playing with a sequence of NN integers. For every index i, WLD wants to find the smallest index F(i)F(i) ( if exists ), that i
#include<stdio.h>
#include<math.h>
int main()
{
int n;
int a[100003];
while(~scanf("%d",&n))
{
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
int zuobiao[100003]={0};//记录倍数的最小坐标
int ans=0;
for(int i=n;i>0;i--)
{
ans+=zuobiao[a[i]];
int sq=sqrt(a[i])+1;
for(int j=1;j<a[i]&&j<sq;j++)//记录分子
{
if(a[i]%j==0)
{
zuobiao[j]=i;
zuobiao[a[i]/j]=i;//分开。。
}
}
}
printf("%d\n",ans);
}
}
暴力码
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
int a[10000];
int main()
{
int n;
while (cin >> n)
{
long long sum = 0;
for (int i = 1;i <= n;i++)
{
cin >> a[i];
}
for (int i = 1;i <= n;i++)
{
int num=0;
for (int j = i + 1;j <= n;j++)
{
if (a[j] % a[i] == 0)
{
num=j;
break;
}
}
sum+=num;
}
cout << sum << endl;
}
}