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 ?
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 ", cnt); 29 } 30 }