• UVA 10892


    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.

    <!--[if !supportEmptyParas]--> <!--[endif]-->

    Input

    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.

    <!--[if !supportEmptyParas]--> <!--[endif]-->

    Output

    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.

    <!--[if !supportEmptyParas]--> <!--[endif]-->

    Sample Input                             Output for Sample Input

    2
    12
    24
    101101291
    0

    2  2

    12  8

    24  11

    101101291  5

    #include <iostream>
    #include <stdio.h>
    #include <queue>
    #include <stdio.h>
    #include <string.h>
    #include <vector>
    #include <queue>
    #include <set>
    #include <algorithm>
    #include <map>
    #include <stack>
    #include <math.h>
    #define Max(a,b) ((a)>(b)?(a):(b))
    #define Min(a,b) ((a)<(b)?(a):(b))
    using namespace std ;
    typedef long long LL ;
    const int M=45000 ;
    bool isprime[M+10] ;
    int prime[M] ,id;
    void make_prime(){
        id=0 ;
        memset(isprime,0,sizeof(isprime)) ;
        for(int i=2;i<=M;i++){
            if(!isprime[i])
                prime[++id]=i ;
            for(int j=1;j<=id&&prime[j]*i<=M;j++){
                isprime[i*prime[j]]=1 ;
                if(i%prime[j]==0)
                   break ;
            }
        }
    }
    LL gao(LL x){
       LL sum ;
       LL ans=1 ;
       for(int i=1;i<=id&&prime[i]*prime[i]<=x;i++){
           if(x%prime[i]==0){
                sum=0 ;
                while(x%prime[i]==0){
                    sum++ ;
                    x/=prime[i] ;
                }
                ans=ans*(sum+sum+1) ;
           }
           if(x==1)
               break  ;
       }
       if(x!=1)
           ans*=3 ;
       return (ans+1)>>1 ;
    }
    int main(){
       LL x ;
       make_prime() ;
       while(cin>>x&&x){
           cout<<x<<" "<<gao(x)<<endl ;
       }
       return 0 ;
    }

  • 相关阅读:
    Spring第三天:Spring的AOP的注解开发、Spring的声明式事务、JdbcTemplate
    Spring第二天:Spring的IOC的注解方式、Spring的AOP开发(XML)
    Spring第一天:Spring的概述、SpringIOC入门(XML)、Spring的Bean管理、Spring属性注入
    PHP变量的声明及其作用域
    p {font-family: "sans serif";}
    深入理解JavaScript位运算符
    Jquery ajax 解析加载XML文件
    php网站开发安全小常识
    简单的DOS攻击之死亡之ping详解
    php中GET和POST的区别
  • 原文地址:https://www.cnblogs.com/liyangtianmen/p/3381372.html
Copyright © 2020-2023  润新知