hdu1215七夕节(快速求不同因子数的和)
2013-12-09 16:39
260 查看
七夕节
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 25411 Accepted Submission(s): 7871
Problem Description
七夕节那天,月老来到数字王国,他在城门上贴了一张告示,并且和数字王国的人们说:"你们想知道你们的另一半是谁吗?那就按照告示上的方法去找吧!"
人们纷纷来到告示前,都想知道谁才是自己的另一半.告示如下:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/16/5f9c67c61cc20b21c03aa808dbcdcada.jpg)
数字N的因子就是所有比N小又能被N整除的所有正整数,如12的因子有1,2,3,4,6.
你想知道你的另一半吗?
Input
输入数据的第一行是一个数字T(1<=T<=500000),它表明测试数据的组数.然后是T组测试数据,每组测试数据只有一个数字N(1<=N<=500000).
Output
对于每组测试数据,请输出一个代表输入数据N的另一半的编号.
Sample Input
3
2
10
20
Sample Output
1
8
22
Author
Ignatius.L
Source
杭电ACM省赛集训队选拔赛之热身赛
从这道题目明显得知了java在时间上的弱势!
超时代吗》_《.......
2013-12-09 16:15:55 | Time Limit Exceeded | 1215 | 2000MS | 1408K | 687 B | Java | 1983210400 |
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Main { public static void main(String[] args) throws NumberFormatException, IOException { // Scanner sc = new Scanner(System.in); BufferedReader bf=new BufferedReader(new InputStreamReader(System.in)); int T =Integer.parseInt(bf.readLine()); int n,m,sum,i,j; while(T-->0){ n = Integer.parseInt(bf.readLine()); m = (int)Math.sqrt(n); sum = 1; i = 2; for( j=2;i<=m;j++){ if(n%i==0){ if(n/i==i){ sum+=i; }else{ sum+=n/i+i; } } }System.out.println(sum); } } }
C的同样代码
2013-12-09 16:03:31 | Accepted | 1215 | 250MS | 240K | 372 B | C | 1983210400 |
#include <stdio.h> #include <math.h> int n,m,i,j,t,T,sum; int main(){ scanf("%d",&T); while(T-->0){ scanf("%d",&n); m = (int)sqrt(n); sum = 1; for( i=2;i<=m;i++){ if(n%i==0){ t = n/i; if(t==i) sum+=i; else sum+=t+i; } }printf("%d\n",sum); } return 0; }
这是优化后的:
2013-12-09 16:21:36 Accepted 1215 1671MS 3092K 648 B Java 1983210400
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class hdu1215七夕节 { public static void main(String[] args) throws NumberFormatException, IOException { BufferedReader bf=new BufferedReader(new InputStreamReader(System.in)); int T =Integer.parseInt(bf.readLine()); int n,m,sum,i; while(T-->0){ n = Integer.parseInt(bf.readLine()); m = (int)Math.sqrt(n); sum = 1; for( i=2;i<=m;i++) if(n%i==0) sum+=n/i+i; if(m*m==n)//去掉重复的例如25sum多算了5 sum-=m; System.out.println(sum); } } }
C/C++的一个字高效!
2013-12-09 16:29:02 Accepted 1215 250MS 240K 333 B C 1983210400
#include <stdio.h> #include <math.h> int n,m,i,j,t,T,sum; int main(){ scanf("%d",&T); while(T-->0){ scanf("%d",&n); m = (int)sqrt(n); sum = 1; for(i=2;i<=m;i++) if(n%i==0) sum+=n/i+i; if((i-1)*(i-1)==n) sum-=m; printf("%d\n",sum); } return 0; }
相关文章推荐
- hdu1215 七夕节 (数学:求因子之和)
- hdu1215 七夕节 (预处理,求x的因子和)
- 七夕节---hdu1215(打表求因子和)
- hdu1215 七夕节 一道题目的解题全过程 给我不少启发 求n的因子之和
- hdu1215七夕节 筛素数+素因子分解+乘法公式
- hdu1215 七夕节 (因子分解)
- 统计一个数分解质因数中不同因子的个数
- HDU 1215 七夕节(因子和)
- 在win8.1中按不同条件筛选应用方便大家快速找到所需的应用
- 不同系统中文件的快速传输、文件压缩
- 快速得到两个list中不同部分的list
- 在三台不同的CentOS 7主机上用rpm包快速部署LAMP
- hdu 1452 因子和 + 逆元素+ 快速幂
- HDU 1215 七夕节 因子求和
- 3个不同的因子-LintCode
- hdu2574(一个数的不同的质数因子个数)
- 使用Linq快速查找两个DataTable不同的结果
- 统计一个数分解质因数中不同因子的个数
- 利用正则快速找出两个字符串的不同字符
- hdu1215 求因子和