#include <iostream>
#include <set>
#include <algorithm>
#include <map>
#include <cstdlib>
#include <cstdio>
#include <vector>
#include <cmath>

using namespace std;

typedef long long ll;

map<int,int> decomposition(ll L){
	map<int,int> cnt;
	for(ll i = 2; i*i <= L; i++){
		if(L%i==0){
			while(1){
				if(L%i==0){
					cnt[i]++;
					L/=i;
				}
				else
					break;
			}
		}
	}
	if(L!=1)
		cnt[L]++;
	return cnt;
}

map<int,int> res;

pair<int,int> nums[10001];
pair<int,int> divNum[10001];
int cn;

int ct=0;

void dfs(map<int,int>::iterator cp){
	if(cp==res.end()){
		// ツ仰、ツ津環閉板閉ェツづーツ個按づ淞つスツづァツ、ツ残ツづィツづ個要ツ素ツづ個閉ェツ環づ個陛サツ法ツづ個堕債青板づーツ青板つヲツづゥ
		//vector<int> v;
		set<int> s;
		for(int i = 0; i < cn; i++){
			if(divNum[i].second-nums[i].second>0)
				s.insert(i);
		}
		int mul=(int)pow(2.0,(int)s.size());
		if(mul!=1)
			mul/=2;
		ct+=mul;
	}
	else{
		for(int i = 0; i <= cp->second; i++){
			nums[cn].first=cp->first;
			nums[cn].second=i;
			cn++;
			cp++;
			dfs(cp);
			cp--;
			cn--;
		}
	}
}

int main(){

	ll L;
	while(cin>>L&&L!=0){
		res.clear();
		res=decomposition(L);
		cn=0;
		for(map<int,int>::iterator it = res.begin(); it != res.end(); it++){
			divNum[cn].first=it->first;
			divNum[cn].second=it->second;
			cn++;
		}
		// ツ仰、ツ津環閉板閉ェツづ個個按津ィ
		cn=0;
		ct=0;
		dfs(res.begin());
		cout<<ct<<endl;
	}


	return 0;
}