nyoj 216-A problem is easy ((i + 1) * (j + 1) = N + 1)

216-A problem is easy


内存限制:64MB 时间限制:1000ms 特判: No
通过数:13 提交数:60 难度: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

C/C++  AC:

 1 #include <iostream>
 2 #include <algorithm>
 3 #include <cstring>
 4 #include <cstdio>
 5 #include <cmath>
 6 #include <stack>
 7 #include <set>
 8 #include <map>
 9 #include <queue>
10 #include <climits>
11 
12 using namespace std;
13 
14 int main()
15 {
16     long long T, a, b;
17     cin >>T;
18     while (T --)
19     {
20         scanf("%lld", &a);
21         b = sqrt(a + 1);
22         long long cnt = 0;
23         for (int i = 2; i <= b; ++ i)
24         {
25             if ((a + 1) % i == 0)
26                 ++ cnt;
27         }
28         printf("%lld\n", cnt);
29     }
30 }

猜你喜欢

转载自www.cnblogs.com/GetcharZp/p/9333497.html