Hdu-1215 七夕节【算术基本定理应用】
来源:互联网 发布:离线地图标注软件 编辑:程序博客网 时间:2024/06/06 10:38
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1215
解题思路:
这道题要求的就是一个整数的因子之和。
但是这道题在杭电数据比较弱,各种方法都能过。暴力都能过,但是在我们OJ,只能使用优化的代码。因为数据是1-500000,暴力的话,估计得跑个几十秒。
下面说下这道题的优化解法:
1.素数打表,这个就不说了,基本功。
2.接下来就是这个问题的关键:素分解。不会的可以移步这篇文章:http://wenku.baidu.com/view/e55ca209ba1aa8114431d98a.html
代码如下:
#include<iostream>#include<cstring>#include<cstdio>#include<string>#include<cmath>#include<algorithm>using namespace std;#define CLR(arr, what) memset(arr, what, sizeof(arr))const int N = 500002;int prim[N];bool visit[N];void fast_prim() //素数打表{memset(visit, true, sizeof(visit));int limit = (int)sqrt(N * 1.0);for(int i = 2; i < limit; ++i)if(visit[i])for(int j = i * i; j < N; j += i)visit[j] = false;for(int i = 2, j = 0; i < 10000; ++i)if(visit[i])prim[j++] = i;}int prim_reduce(int n) //整数素分解{int limit, num, sum, total = 1, temp = n;limit = sqrt(N * 1.0);for(int i = 0; prim[i] * prim[i] <= n; ++i){num = sum = 1;if(n == 1)break;while(n % prim[i] == 0){num *= prim[i];n /= prim[i];sum += num;}total *= sum;}if(n != 1)total *= (n + 1);return total - temp;}int main(){fast_prim();int ncase;int num;scanf("%d", &ncase);while(ncase--){scanf("%d", &num);if(num == 1){printf("0\n");continue;}else if(visit[num]){printf("1\n");continue;}elseprintf("%d\n", prim_reduce(num));}return 0;}
第二种方法:
在于打表的过程不同,第一种方法是解决这种问题的通法,但这道题我们可以用另一种打表方面,a[i]代表的就是这个因子之和,这样,我们就可以一次打表,O(1)输出。
代码如下:
#include<iostream>#include<cstring>#include<cstdio>#include<string>#include<cmath>#include<algorithm>using namespace std;#define CLR(arr, what) memset(arr, what, sizeof(arr))const int N = 500002;const int M = 250000;int a[N] = {0, 0};void fash(){for(int i = 2; i < N; ++i) //因子初始化为1a[i] = 1;for(int i = 2; i <= M; ++i) //一半即可for(int j = 2 * i; j < N; j += i)a[j] += i;}int main(){fash();int ncase;scanf("%d", &ncase);while(ncase--){int num;scanf("%d", &num);printf("%d\n", a[num]);}return 0;}
- Hdu-1215 七夕节【算术基本定理应用】
- hdu 4196 Remoteland 基本算术定理
- HDU1215_七夕节_算数基本定理
- 算术基本定理。。。
- 算术基本定理
- LightOJ1236->算术基本定理
- 算术基本定理
- 算术基本定理
- 算术基本定理
- HDU 1215 七夕节 【约数和定理&&唯一分解定理(模板)】
- HDU 4497 GCD and LCM (素数筛选+算术基本定理)
- 【hdu 4497】GCD and LCM 【算术基本定理】
- nefu 118 119(算术基本定理的应用)
- nefu119 组合素数 算术基本定理的应用
- uva 10791 Minimun Sum Lcm(算术基本定理应用,推荐)
- hdu 1215 七夕节
- hdu 1215 七夕节
- HDU 1215 七夕节
- C/C++中的函数参数传递机制(zz)
- http://blog.csdn.net/hell2pradise/article/details/5901745
- linux下TCP socket编程初步(1)
- JAVA实现JNDI连接数据库
- 【树形dp】ZOJ-3326-Tree of Tree
- Hdu-1215 七夕节【算术基本定理应用】
- maven3常用命令及eclipse插件地址
- android onResume is called before you unlock the phone
- WebPage应用深入探讨
- 记本使用串口全攻略(转载)
- ZOJ1409 POJ1018 Communication System
- 3.12
- CentOS6.2下JAVAEE开发环配置(1)---Java+Tomcat环境配置
- zend framework的基本设置