Pagini recente » Cod sursa (job #2246288) | Cod sursa (job #2036964) | Cod sursa (job #2047148) | Cod sursa (job #1534117) | Cod sursa (job #3176814)
#include <bits/stdc++.h>
#pragma optimize GCC ("Ofast")
#pragma GCC optimize("O3")
#pragma GCC optimize("unroll-loops")
///#include <tryhardmode>
///#include <GODMODE::ON>
using namespace std;
ifstream fin ("indep.in");
ofstream fout ("indep.out");
const int NMAX=1e3+5;
int v[NMAX];
struct Huge{
int digits[200];
void reset()
{
for(int i=1;i<=digits[0];i++)
digits[i]=0;
digits[0]=0;
}
void add_num(int val)
{
int kon=val;
for(int i=1;i<=digits[0];i++)
{
digits[i]=digits[i]+kon;
kon=digits[i]/10;
digits[i]%=10;
}
while(kon)
{
digits[++digits[0]]=kon%10;
kon/=10;
}
}
add_huge(const Huge &other)
{
int kon=0;
digits[0]=max(digits[0],other.digits[0]);
for(int i=1;i<=digits[0];i++)
{
digits[i]=digits[i]+other.digits[i]+kon;
kon=digits[i]/10;
digits[i]=digits[i]%10;
}
while(kon)
{
digits[++digits[0]]=kon%10;
kon/=10;
}
}
void print()
{
if(digits[0]==0)
{
fout<<0;
return;
}
for(int i=digits[0];i>=1;i--)
fout<<digits[i];
}
};
Huge dp[2][NMAX];
int main()
{
ios_base::sync_with_stdio(false);
fin.tie(NULL);
fout.tie(NULL);
int n,i,j,maxi=-1;
bool ok=false;
fin>>n;
for(i=1;i<=n;i++)
{
fin>>v[i];
maxi=max(maxi,v[i]);
}
for(i=1;i<=n;i++)
{
for(j=1;j<=maxi;j++)
{
dp[!ok][j].reset();
dp[!ok][j].add_huge(dp[ok][j]);
}
dp[!ok][v[i]].add_num(1);
for(j=1;j<=maxi;j++)
if(dp[ok][j].digits[0]!=0)
dp[!ok][__gcd(j,v[i])].add_huge(dp[ok][j]);
ok=!ok;
}
dp[ok][1].print();
fin.close();
fout.close();
return 0;
}