Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- ifstream in("nrdivprod.in");
- ofstream out("nrdivprod.out");
- vector<int> prime(1000001),v(80000),w={2};
- int cautare(int x)
- {
- int st=0,dr=w.size()-1,mij;
- while(st<=dr)
- {
- mij=(st+dr)/2;
- if(w[mij]==x)
- return mij;
- else
- if(w[mij]>x)
- dr=mij-1;
- else
- st=mij+1;
- }
- return 0;
- }
- void init()
- {
- int i;
- prime[0]=prime[1]=1;
- for(i=3;i*i<=1000000;i+=2)
- if(prime[i]==0)
- {
- w.push_back(i);
- for(int j=i*i;j<=1000000;j+=2*i)
- prime[j]=1;
- }
- for(;i<=1000000;i+=2)
- if(prime[i]==0)
- w.push_back(i);
- }
- void fact(int x)
- {
- int ap=0,ok=0;
- for(int i=0;i<w.size() && i*i<=x;i++)
- {
- ap=0;
- while(x%w[i]==0)
- x/=w[i],ap++;
- if(ap)
- v[i]+=ap;
- }
- if(x>1)
- v[cautare(x)]++;
- }
- int main()
- {
- init();
- unsigned long long n,x,p=1;
- in>>n;
- for(int i=1;i<=n;i++)
- {
- in>>x;
- if(!prime[x] && (x%2 && x!=2))
- v[cautare(x)]++;
- else
- fact(x);
- }
- for(int i=0;i<v.size();i++)
- p*=(v[i]+1),p%=1000000007;
- out<<p;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement