Pagini recente » Cod sursa (job #414936) | Cod sursa (job #545969) | Cod sursa (job #1623717) | trainingtsa2 | Cod sursa (job #2465738)
#include <iostream>
#include <fstream>
#include <vector>
#include <stack>
using namespace std;
ifstream fin("indep.in");
ofstream fout("indep.out");
struct bigbrain{
int digi[214];
bigbrain(){
for(int i = 0; i <= 200; i++){
digi[i] = 0;
}
}
bigbrain(int a) : digi(){
digi[0] = a%10;
}
void write(ostream & out){
bool yes = false;
for(int i = 200; i >= 0; i--){
if(digi[i] != 0){
yes = true;
}
if(yes){
out << digi[i];
}
}
if(!yes){
out << 0;
}
out << "\n";
}
void minusone(){
digi[0]--;
}
void add(bigbrain rhs){
int r = 0;
for(int i = 0; i <= 200; i++){
digi[i] += rhs.digi[i] + r;
r = digi[i] / 10;
digi[i] %= 10;
}
}
void mul(int rhs){
int r = 0;
for(int i = 0; i <= 200; i++){
digi[i] *= rhs;
digi[i] += r;
r = digi[i] / 10;
digi[i] %= 10;
}
}
void raise(int p){
for(int i = 0; i < p; i++){
this->mul(2);
}
}
};
int gcd(int a, int b){
if(a == 0){
return b;
}
return gcd(b%a, a);
}
int n;
int frecc[1041];
bigbrain kapow(int a, int p){
bigbrain r = 1;
for(int i = 0; i < p; i++){
r.mul(a);
}
return r;
}
bigbrain susta(int a){
if(frecc[a] > 0){
int d, nd;
d = nd = 0;
for(int i = a+1; i <= 1000; i++){
if(frecc[i] > 0){
if(gcd(a,i) != 1){
d += frecc[i];
}else{
nd += frecc[i];
}
}
}
//cout << a << " " << nd << " " << d << "\n";
bigbrain r(1);
r.raise(nd);
r.minusone();
r.raise(d);
return r;
}else{
return bigbrain(0);
}
}
int main(){
int a;
fin >> n;
for(int i = 0; i < n; i++){
fin >> a;
frecc[a]++;
}
bigbrain sol(0);
for(int i = 2; i <= 1000; i++){
sol.add(susta(i));
}
sol.write(fout);
return 0;
}