Untitled
By: a guest | Mar 19th, 2010 | Syntax:
None | Size: 0.87 KB | Hits: 81 | Expires: Never
#include <stdio.h>
#include <iostream>
#include <ctime>
#include <vector>
#include <map>
using namespace std;
vector<int> fac;
map< int, int> waysx;
int ways( int x) {
int ans = 0;
map< int, int>::iterator fnd;
fnd = waysx.find( x);
if( fnd == waysx.end()) {
if( x > 1) {
vector<int>::const_iterator ci;
for( ci = fac.begin(); ci != fac.end(); ci++) {
if( x%(*ci) == 0)
ans += 1 + ways( x/(*ci));
}
}
waysx.insert( pair< int, int>( x, ans));
}
fnd = waysx.find( x);
return fnd->second;
}
void factors( int x) {
for( int i = 2; i< x/2; i++)
if( x%i == 0) {
fac.push_back( i);
}
}
int main( int argc, char** argv) {
clock_t start;
int cases = 1;
cin>>cases;
for( int i = 0; i < cases; i++) {
int max = 111212121;
cin>>max;
max++;
factors( max);
cout<<ways( max)<<endl;
}
return 0;
}