Pagini recente » Cod sursa (job #51979) | Cod sursa (job #1110991) | Cod sursa (job #2724802) | Cod sursa (job #2561515) | Cod sursa (job #3224624)
#include <fstream>
#include <algorithm>
#define int long long
using namespace std;
ifstream in("indep.in");
ofstream out("indep.out");
int n;
int v[505];
int dp[1005][1005];
void aduna(int x, int y)
{
dp[x][0] = max(dp[x][0], dp[y][0]);
int t = 0;
for(int i = 1; i<=dp[x][0]; i++)
{
t += dp[x][i] + dp[y][i];
dp[x][i] = t % 10;
t /= 10;
}
while(t != 0)
{
dp[x][0]++;
dp[x][dp[x][0]] = t % 10;
t /= 10;
}
}
signed main()
{
in>>n;
for(int i = 1; i<=n; i++)
{
in>>v[i];
}
dp[0][0] = dp[0][1] = 1;
for(int i = 1; i<=n; i++)
{
for(int j = 1; j<=1000; j++)
{
if(dp[j][0] == 0)
{
continue;
}
int gcd = __gcd(j, v[i]);
//dp[gcd] += dp[j];
aduna(gcd, j);
}
//dp[v[i]] += dp[0];
aduna(v[i], 0);
}
if(dp[1][0] == 0)
{
out<<0;
}
else
{
for(int i = dp[1][0]; i>=1; i--)
{
out<<dp[1][i];
}
}
return 0;
}