zoukankan      html  css  js  c++  java
  • hdu 2654 Be a hero

    ()Become A Hero

    Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
    Total Submission(s): 295    Accepted Submission(s): 83


    Problem Description
    Lemon wants to be a hero since he was a child. Recently he is reading a book called “Where Is Hero From” written by ZTY. After reading the book, Lemon sends a letter to ZTY. Soon he recieves a reply.

    Dear Lemon,
    It is my way of success. Please caculate the algorithm, and secret is behind the answer. The algorithm follows:
    Int Answer(Int n)
    {
    .......Count = 0;
    .......For (I = 1; I <= n; I++)
    .......{
    ..............If (LCM(I, n) < n * I)
    ....................Count++;
    .......}
    .......Return Count;
    }
    The LCM(m, n) is the lowest common multiple of m and n.
    It is easy for you, isn’t it. 
    Please hurry up!
    ZTY

    What a good chance to be a hero. Lemon can not wait any longer. Please help Lemon get the answer as soon as possible. 
     
    Input
    First line contains an integer T(1 <= T <= 1000000) indicates the number of test case. Then T line follows, each line contains an integer n (1 <= n <= 2000000).
     
    Output
    For each data print one line, the Answer(n).
     
    Sample Input
    1
    1
     
    Sample Output
    0
     
    题解:
    题意是求满足lcm(i,n)<i*n条件的 i 的个数
    因为lum(i,n)=(i*n)/gcd(i,n);
    所以     lcm(i,n)<i*n   <<===>>gcd(i,n)>1
    即求i<n中 i, n不互质的个数
    (不互质的个数=n-φ(n))
    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    typedef long long ll;
    ll euler(ll x)
    {
        ll res = x;
        for(int i=2 ;i*i<=x ;i++)
        {
            if(x%i == 0)
            {
                res = res/i*(i-1);
                while(x%i==0) 
                  x/=i;
            }
        }
        if(x>1) 
          res = res/x*(x-1);
        return res;
    }
    
    int main()
    {
        int t;
        scanf("%d",&t);
        while(t--)
        {
            ll n;
            scanf("%I64d",&n);
            printf("%I64d
    ",n-euler(n));
        }
        return 0;
    }
     
  • 相关阅读:
    线性动力学变分原理基础 Part1
    对分析动力学的一些理解
    Matlab数值求解超越方程的根
    FORTRAN数值求超越方程的根
    vim 基础操作
    a simple vim set for fortran
    g95 ld: cannot find crt1.o: No such file or directory
    ug中英文对照
    autocad一些快捷键和命令
    列选主元的高斯消元法的Fortran程序
  • 原文地址:https://www.cnblogs.com/-citywall123/p/10171035.html
Copyright © 2011-2022 走看看