NOJ 题目216:A problem is easy

来源:互联网 发布:数据库服务端和客户端 编辑:程序博客网 时间:2024/05/16 09:10

A problem is easy

时间限制:1000ms  |  内存限制:65535 KB
难度:3


    描述
      When Teddy was a child , he was always thinking about some simple math problems ,such as “What it’s 1 cup of water plus 1 pile of dough ..” , “100          yuan  buy 100 pig” .etc..


     One day Teddy met a old man in his dream , in that dream the man whose name was“RuLai” gave Teddy a problem :


    Given an N , can you calculate how many ways to write N as  i * j + i + j (0 < i <= j) ?


    Teddy found the answer when N was less than 10…but if N get bigger , he found it was too difficult for him to solve.

    Well , you clever ACMers ,could you help little Teddy to solve this problem and let him have a good dream ?

    输入

    The first line contain a T(T <= 2000) . followed by T lines ,each line contain an integer N (0<=N <= 10^11).

    输出

    For each case, output the number of ways in one line

    样例输入
   
     2
     1
     3

    样例输出
    
     0
     1
 


本题数学原理:由 n=i*j+i+j 推出 n+1=(i+1)*(j+1)

#include <iostream>using namespace std;int main(){    int z;    cin>>z;    while( z-- )    {        int n;        cin>>n;        if( n<=2 )           cout<<"0"<<endl;        else        {            int sum=0;            for( int i=1;(i+1)*(i+1)<=(n+1);i++ ) //注意!此处省略括号或者使用sqrt函数会使执行时间延长            {                if( (n+1)%(i+1)==0 )                {                    sum++;                }            }            cout<<sum<<endl;        }    }    return 0;}


0 0
原创粉丝点击