Pagini recente » Cod sursa (job #699993) | Cod sursa (job #1022850) | Cod sursa (job #485222) | Cod sursa (job #1948907) | Cod sursa (job #2581056)
#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;
}