Pagini recente » Cod sursa (job #1424138) | Cod sursa (job #1474735) | Cod sursa (job #44648) | Cod sursa (job #1037138) | Cod sursa (job #2581058)
#include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;
struct HugeN{
vector<int> nr;
HugeN (){
nr.clear();
}
HugeN(int x){
nr.clear();
while(x>0){
nr.push_back(x%10);
x/=10;
}
}
};
void add(HugeN &a,const HugeN &b){
int t=0;
for(int i=0;i<a.nr.size() || i<b.nr.size() || t>0;i++){
if(i<a.nr.size()){
t+=a.nr[i];
}
if(i<b.nr.size()){
t+=b.nr[i];
}
if(i<a.nr.size())
a.nr[i]=t%10;
else
a.nr.push_back(t%10);
t/=10;
}
}
const int NMAX=1000;
HugeN dp[NMAX + 5];
int main()
{
int n , x;
freopen("indep.in" , "r" , stdin);
freopen("indep.out" , "w" , stdout);
scanf("%d", &n);
dp[0] = 1;
for(int i = 1; i <= n ; i ++)
{
scanf("%d" , &x);
for(int j = 1; j <= NMAX ; j ++)
{
if(dp[j].nr.empty() == false){
int cmmdc = __gcd(x , j);
add(dp[cmmdc] , dp[j]);
}
}
add(dp[x] , dp[0]);
}
for(int i = dp[1].nr.size() - 1; i >= 0 ; i --)
printf("%d", dp[1].nr[i]);
if(dp[1].nr.empty() == true)
printf("0");
return 0;
}