Problem F
LCM Cardinality
Input: Standard Input
Output: Standard Output
Time Limit: 2 Seconds
A pair of numbers has a unique LCM but a single number can be the LCM of more than one possible pairs. For example 12 is the LCM of (1, 12), (2, 12), (3,4) etc. For a given positive integer N, the number of different integer pairs with LCM is equal to N can be called the LCM cardinality of that number N. In this problem your job is to find out the LCM cardinality of a number.
The input file contains at most 101 lines of inputs. Each line contains an integer N (0<N<=2*109). Input is terminated by a line containing a single zero. This line should not be processed.
For each line of input except the last one produce one line of output. This line contains two integers N and C. Here N is the input number and C is its cardinality. These two numbers are separated by a single space.
2 12 24 101101291 0 |
2 2 12 8 24 11 101101291 5 |
Problem setter: Shahriar Manzoor
Special Thanks: Derek Kisman
#include <cstdio> #include <algorithm> #include <cstring> using namespace std; void work(int n) { int nn=n; int ans=1; for(int i=2;i*i<=n;i++) if(n%i==0) { int t=0; while(n%i==0) n/=i,t++; ans*=(t*2+1); } if(n>1) ans*=3; ans-=1; ans/=2; ans+=1; printf("%d %d\n", nn, ans); } int main() { int n; while(~scanf("%d",&n) && n) work(n); }