Pagini recente » Cod sursa (job #1952379) | Cod sursa (job #1953050) | Cod sursa (job #1282127) | Cod sursa (job #3325758) | Cod sursa (job #3314471)
#include <bits/stdc++.h>
//#define int long long
#pragma GCC optimize ("O4,Ofast,unroll-loops")
#define pb push_back
using namespace std;
vector <vector<int>> dp(1001, {0});
void Adunare(vector <int> &a,vector <int> b){
while (b.size()>a.size()){
a.push_back(0);
}
while (b.size()<a.size()){
b.push_back(0);
}
int r = 0;
for (int i=0;i<a.size();++i){
a[i] = a[i]+b[i]+r;
r = a[i]/10;
a[i] = a[i]%10;
}
if (r){
a.push_back(r);
}
return;
}
signed main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
ifstream cin ("indep.in");
ofstream cout ("indep.out");
int n;cin >> n;
vector <int> v;
for(int i=0;i < n;i++){
int x;cin >> x;v.pb(x);
}
//dp[v[0]]=1;
Adunare(dp[v[0]], {1});
vector <int> tweaking;
tweaking.pb(v[0]);
for(int i=1;i < n;i++){
vector<int> tweakingv2=tweaking;
vector<int> aux;
for(auto j : tweaking){
Adunare(dp[__gcd(v[i], j)], dp[j]);
aux.pb(__gcd(v[i], j));
}
tweaking.resize(0);
aux.pb(v[i]);
int s1=0,s2=0;
while(s1 + s2 < tweakingv2.size() + aux.size()){
if(s1 == tweakingv2.size()){
tweaking.pb(aux[s2++]);
}else if(s2 == aux.size()){
tweaking.pb(tweakingv2[s1++]);
}else{
if(tweakingv2[s1] < aux[s2]){
if(tweaking[tweaking.size()] == tweakingv2[s1]){
s1++;
}else{
tweaking.pb(tweakingv2[s1++]);
}
}else{
if(tweaking[tweaking.size()] == aux[s2]){
s2++;
}else{
tweaking.pb(aux[s2++]);
}
}
}
}
//dp[v[i]]++;
Adunare(dp[v[i]], {1});
}
reverse(dp[1].begin(), dp[1].end());
bool ok = true;
for(auto x : dp[1]){
if(x == 0 && ok)continue;
ok=false;
cout << x;
}
return 0;
}