ZOJ 3175 Number of Containers


ZOJ Problem Set - 3175
Number of Containers
Time Limit: 1 Second      Memory Limit: 32768 KB
For two integers m and k, k is said to be a container of m if k is divisible by m. Given 2 positive integers n and m (m < n), the function f(n, m) is defined to be the number of containers of m which are also no greater than n. For example, f(5, 1)=4, f(8, 2)=3, f(7, 3)=1, f(5, 4)=0...

Let us define another function F(n) by the following equation: 

 
ZOJ 3175 Number of Containers - qhn999 - 码代码的猿猿

Now given a positive integer n, you are supposed to calculate the value of F(n).
Input

There are multiple test cases. The first line of input contains an integer T(T<=200) indicating the number of test cases. Then T test cases follow.

Each test case contains a positive integer n (0 < n <= 2000000000) in a single line.

Output

For each test case, output the result F(n) in a single line.

Sample Input

2
1
4
Sample Output

0
4
Author: CAO, Peng
Contest: The 9th Zhejiang University Programming Contest

n*(1/1+1/2+1/3+1/4+.........+1/n)-n
枚举到sqrt(n)×2-重复部分

#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>

using namespace std;

typedef unsigned long long int uLL;

int main()
{
    int T;
    int n;
    uLL ans;
    cin>>T;
while(T--)
{
    cin>>n;
    int nt=(int)sqrt(n*1.0);
    ans=0;
    for(int i=1;i<=nt;i++)
    {
        ans+=n/i;
    }

    ans=ans*2-nt*nt;
    ans-=n;
    cout<<ans<<endl;
}
    return 0;
}

posted @ 2013-07-26 04:50  码代码的猿猿  阅读(267)  评论(0)    收藏  举报