HDU 七夕节(求一个数的因子和)
2015-08-11 09:37
253 查看
七夕节那天,月老来到数字王国,他在城门上贴了一张告示,并且和数字王国的人们说:"你们想知道你们的另一半是谁吗?那就按照告示上的方法去找吧!"
人们纷纷来到告示前,都想知道谁才是自己的另一半.告示如下:
![](http://acm.hdu.edu.cn/data/images/C8-1006-1.jpg)
数字N的因子就是所有比N小又能被N整除的所有正整数,如12的因子有1,2,3,4,6.
你想知道你的另一半吗?
这是一开始的想法,超过一半之后就不可能成为因子。但是WA了,因为有成对的因子在一半以内,造成重复计算。比如20的因子:1,2,4,5,10;按照这种做法,4,5会计算两次。
这是第二次尝试,答案正确,但是超时了,数组开的太大,有太多冗余计算。
这是参考网上博客后的答案,为什么是sqrt(n)呢?
参考地址:http://blog.sina.com.cn/s/blog_71ded6bf0100skxf.html
人们纷纷来到告示前,都想知道谁才是自己的另一半.告示如下:
![](http://acm.hdu.edu.cn/data/images/C8-1006-1.jpg)
数字N的因子就是所有比N小又能被N整除的所有正整数,如12的因子有1,2,3,4,6.
你想知道你的另一半吗?
[align=left]Input[/align] 输入数据的第一行是一个数字T(1<=T<=500000),它表明测试数据的组数.然后是T组测试数据,每组测试数据只有一个数字N(1<=N<=500000). |
[align=left]Output[/align] 对于每组测试数据,请输出一个代表输入数据N的另一半的编号. |
int f(int a){ int sum=1; for(int i=2;i<a/2;i++){ if(a%i==0){ sum+=(a/i)+i; } } return sum; }
这是一开始的想法,超过一半之后就不可能成为因子。但是WA了,因为有成对的因子在一半以内,造成重复计算。比如20的因子:1,2,4,5,10;按照这种做法,4,5会计算两次。
int a[500000]; int f1(){ memset(a,1,sizeof(a)); for(int i=2;i<=250000;i++){ for(int j=i+i;j<=500000;j+i) a[j]+=j; } return 0; }
这是第二次尝试,答案正确,但是超时了,数组开的太大,有太多冗余计算。
int main() { int i,j,n,a; while(cin>>n) { for(i=0;i<n;i++) { cin>>a; int sum=1; int k=int (sqrt(double (a))); //缩小了时间复杂度, for(j=2;j<=k;j++) //2--sqrt(a) { int t; if(a%j==0) { sum+=j; t=a/j; if(t!=j)sum+=t; //另一半不等,则相加 } } cout<<sum<<endl; } } return 0; }
这是参考网上博客后的答案,为什么是sqrt(n)呢?
参考地址:http://blog.sina.com.cn/s/blog_71ded6bf0100skxf.html
相关文章推荐
- 改变mysql表中某个字段的数据类型
- 1028. List Sorting (25)
- uvalive5009(三分)
- strdup
- Android 增量更新实例
- Android Volley框架(一):StringRequest、JsonObjectRequest、JsonArrayRequest
- Codeforces Round #315 (Div. 2)
- 遍历多维数组
- Air Raid
- Cocos2d-x学习笔记(十)—— 缓存机制
- 如何更新RHEV平台的GUEST代理和驱动
- ios 单例模式的写法
- 17-集合框架-15-常用对象API(集合框架-ArrayList集合存储自定对象)
- Select2插件 IE下 autofocus bug的解决方法
- SQL技巧之分组求和
- error LNK2019: 无法解析的外部符号 _cvHaarDetectObjects,该符号在函数 "void __cdecl detect_and_draw(struct _IplImage
- pyinstaller 打包时出现No Module Named pkg_resources
- 在B获取A的数据——深入浅出讲ContentProvider
- Calendar Date SimpleDateFormat (2)
- 通知中心