HDU2601,An easy problem
来源:互联网 发布:linux squid 启动 编辑:程序博客网 时间:2024/05/01 04:31
该题确实在个简单的问题,因为可能形式很简单,但它又不是那么的简单。
如果这个题选择有两个for循环来写的话,那毫无疑问将超时,所以需要仔细分析一下,可以看出,N=i*j+i+j可以变形为:N+1=( i+1)*( j+1),且由 0<i<=j,可知:1<( i+1)<=( j+1),所以就以(i+1)为基准来进行循环,所以只需要单层循环即可。
再有,由于要考虑它的重复性,所以循环只需要进行到sqrt(N+1)即可,往后再循环的必重复。本题 i 要从1开始,所以 i+1 就要从2开始循环,一直到sqrt(N+1)(其实可以等于sqrt( N+1),此时 i=j,符合题意)。
当我想到这一步,我就感觉很明了了,易知(j+1)=( N+1)/(i+1),所以在循环里我用的判断是:if(((N+1)/(i+1))*( i+1)==n+1)
真不知道当时怎么短路了,会去这样判断,还是超时,后来到网上一看,才知道改成:if((N+1)%(i+1)==0)就行了,就解决了超时的问题。
耗时2562ms。
代码如下:
#include <stdio.h>#include <string.h>#include <math.h>typedef __int64 int64;int main(){int64 i,j,n,count,t,k;scanf("%d",&t);while(t--){count=0;scanf("%I64d",&n);k=sqrt(n+1);for(i=2;i<=k;i++)<span style="white-space:pre"></span>//这里的i指的是i+1if((n+1)%i==0)count++;printf("%d\n",count);}return 0;}
其实我还想到了能够进一步优化,先看:
①:奇 * 奇 + 奇 + 奇 = 奇
②:偶 * 偶 + 偶 + 偶 = 偶
③:奇 * 偶 + 奇 + 偶 = 奇
故可得,若 N 为偶数,那 i 和 j 也都是偶数,那 i+1就是从3开始,每次增加2,所以只需判断一下N是不是偶数就行了:
if(n%2==0){for(i=3;i<=k;i+=2)if((n+1)%i==0)count++;}
那么全代码是:
#include <stdio.h>#include <string.h>#include <math.h>typedef __int64 int64;int main(){int64 i,j,n,count,t,k;scanf("%d",&t);while(t--){count=0;scanf("%I64d",&n);k=sqrt(n+1);if(n%2==0){for(i=3;i<=k;i+=2)if((n+1)%i==0)count++;}else{for(i=2;i<=k;i++)if((n+1)%i==0)count++;}printf("%d\n",count);}return 0;}
这样写,耗时会从上面的 2562ms 降到 1859ms,还行吧。
0 0
- hdu2601 An easy problem
- HDU2601,An easy problem
- HDU2601-An easy problem
- 暴力 hdu2601 An easy problem
- hdu2601 An easy problem(数论)
- hdu2601 An easy problem(数学)
- 求约数 hdu2601 An easy problem
- An Easy Problem
- 2055 An easy problem
- An Easy Problem!
- An Easy Problem!
- poj2826 An Easy Problem?!
- HDOJ2055 An easy problem
- An Easy Problem
- hdu-An Easy Problem
- An Easy Problem
- hdu-An Easy Problem
- HDU_2055 An easy problem
- switch讲解演示
- ZOJ-1245
- OPENCV2.4.9的配置
- hdu 4906 Our happy ending
- php(mysql)
- HDU2601,An easy problem
- c++头文件
- 【转自ITPUB】SYNONYM关于underlying table权限的小小发现
- Android 多线程断点下载源码
- (P)EXCEL 常用工作薄函数和VBA函数
- java_web用户的自动登录模块的实现
- 常见异常汇总
- MVVM设计模式教程 - tutorial with ReactiveCocoa
- 10.jQuery 高级事件