Share Pastebin
Guest
Public paste!

Untitled

By: a guest | Mar 19th, 2010 | Syntax: None | Size: 0.87 KB | Hits: 81 | Expires: Never
Copy text to clipboard
  1. #include <stdio.h>
  2. #include <iostream>
  3. #include <ctime>
  4. #include <vector>
  5. #include <map>
  6.  
  7. using namespace std;
  8. vector<int> fac;
  9. map< int, int> waysx;
  10.  
  11. int ways( int x) {
  12.         int ans = 0;
  13.         map< int, int>::iterator fnd;
  14.         fnd = waysx.find( x);
  15.         if( fnd == waysx.end()) {
  16.                 if( x > 1) {
  17.                         vector<int>::const_iterator ci;
  18.                         for( ci = fac.begin(); ci != fac.end(); ci++) {
  19.                                 if( x%(*ci) == 0)
  20.                                         ans += 1 + ways( x/(*ci));
  21.                         }
  22.                 }
  23.                 waysx.insert( pair< int, int>( x, ans));
  24.         }
  25.         fnd = waysx.find( x);
  26.         return fnd->second;
  27. }
  28.  
  29. void factors( int x) {
  30.         for( int i = 2; i< x/2; i++)
  31.                 if( x%i == 0) {
  32.                         fac.push_back( i);
  33.         }
  34. }
  35.  
  36. int main( int argc, char** argv) {
  37.         clock_t start;
  38.  
  39.         int cases = 1;
  40.         cin>>cases;
  41.         for( int i = 0; i < cases; i++) {
  42.                 int max = 111212121;
  43.                 cin>>max;
  44.                 max++;
  45.                 factors( max);
  46.                 cout<<ways( max)<<endl;
  47.         }
  48.         return 0;
  49. }