A problem is easy

亦凉 2022-06-02 11:21 283阅读 0赞

A problem is easy

时间限制: 1000 ms | 内存限制: 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..
C154-1002-1.jpg
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

样例输入

  1. 2
  2. 1
  3. 3

样例输出

  1. 0
  2. 1

上传者

苗栋栋

思路:因为i+j+i*j=n,所以变形为i+1+j+i*j=n+1,所以为(i+1)*(j+1)=(n+1)

代码:

  1. #include<stdio.h>
  2. #include<math.h>
  3. #include<string.h>
  4. #include<stdlib.h>
  5. #include<algorithm>
  6. using namespace std;
  7. #define maxn 0x3f3f3f
  8. int main()
  9. {
  10. int test;
  11. scanf("%d",&test);
  12. while(test--)
  13. {
  14. int i,ans=0,n;//不知道为什么这里用long long就会超时
  15. scanf("%d",&n);
  16. for(i=1;(i+1)*(i+1)<=n+1;i++)
  17. {
  18. if((n+1)%(i+1)==0)
  19. ans++;
  20. }
  21. printf("%d\n",ans);
  22. }
  23. return 0;
  24. }

发表评论

表情:
评论列表 (有 0 条评论,283人围观)

还没有评论,来说两句吧...

相关阅读