ZOJ 2095和HDU1215(打表)(优化)
来源:互联网 发布:学linux 编辑:程序博客网 时间:2024/04/28 11:19
题目大意:给出一个n,然后输入n个数,求每个数x的因子之和,x的本身除外。
分析:这类连续使用因数和的题目应该想到打表,简单实用。但是由于x的上限是500000,所以如果不进行优化的话,肯定会超时,优化打表,刚开始接触这个,很实用。
思路有两种,第一种思路是用i*j的乘积进行打表。代码几乎一样只是第二种要控制一下输出。
#include<iostream>#include<cstdio>using namespace std;const int N=500005;int main(){ int a[N]={0,0}; for(int i=1;i<=N/2;i++) for(int j=2;j*i<N;j++) a[i*j]+=i; int t,n; cin>>t; while(t--) { scanf("%d",&n); printf("%d\n",a[n]); } return 0;}
因为i是从2开始,少加了i=1的这种情况,所以输出在加上1;
#include<iostream>#include<cmath>using namespace std;int a[500005]={0,-1};int main(){ int n,x; for(int i=2;i<=250000;i++) { for(int j=2;j*i<=500000;j++) a[i*j]+=i; } cin>>n; while(n--) { cin>>x; cout<<a[x]+1<<endl; } return 0;}
第二种思路是用j代表i的2倍进行打表
#include<iostream>#include<cstdio>using namespace std;const int N=500005;int main(){ int a[N]={0,0}; for(int i=1;i<=N/2;i++) for(int j=2*i;j<N;j+=i) a[j]+=i; int t,n; cin>>t; while(t--) { scanf("%d",&n); printf("%d\n",a[n]); } return 0;}
0 0
- ZOJ 2095和HDU1215(打表)(优化)
- 因数打表(HDU1215)
- HDU1215 打表
- ZOJ 3326 日历 (打表)
- zoj 3622 Magic Number (找规律+打表)
- POJ 1595 Prime Cuts (ZOJ 1312) 素数打表
- ZOJ - 3876 May Day Holiday (打表&模拟)
- HDU1215---七夕节 HDU(91)
- HDU1215 七夕节(另一种思想)
- HDU1215---七夕节(小思维题)
- ACM 数论 HDU1215 七夕节 (模板!)
- HDU1215:七夕节(简单数论)
- HDU1215 与1406类似,但是要注意超时(cout 和 printf的区别!!!)
- hdu1215七夕节(快速求不同因子数的和)
- hdu1215 求因子和
- HDU1215
- hdu1215
- hdu1215
- 【java】foreach是如何实现的?
- OpenGL ES 2.0——片段着色器Fragment Shader
- Pyhotn String format
- 根据来电号码显示人名
- power(x,n)
- ZOJ 2095和HDU1215(打表)(优化)
- AVPlayer(网络音频资源)的封装
- 2015山东省第六届ACM省赛 Lowest Unique Price
- 求字符串中最长的单词
- Struts2官网翻译
- Win7环境下搭建Android安卓开发环境(原创教程)
- Bug整理——$(window).height()获取到$(document).height()的问题
- linux删除刚刚解压的文件
- ubuntu 14.04 anaconda2安装后caffe编译错误