hdu1215

七夕节

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 3742 Accepted Submission(s): 1328
 
Problem Description
七夕节那天,月老来到数字王国,他在城门上贴了一张告示,并且和数字王国的人们说:"你们想知道你们的另一半是谁吗?那就按照告示上的方法去找吧!"
人们纷纷来到告示前,都想知道谁才是自己的另一半.告示如下:



数字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
 1 /*
 2 1.筛选法*/
 3 #include<iostream>
 4 #include<cmath>
 5 using namespace std;
 6 
 7 int main()
 8 {
 9     int t,n,i,sum,j,m;
10     cin>>t;
11     while(t--)
12     {
13         sum=1;
14         cin>>n;
15         m=(int)sqrt( double ( n ) );
16 
17         for(i=2;i<=m;i++)
18             if(n%i==0)
19             {
20                 sum +=i;
21                 j=n/i;
22                 if(i!=j)
23                     sum +=j;
24             }
25         cout<<sum<<endl;
26     }
27     return 0;
28 }
29 
30 /*这个方法我是网上学的,但不知道为什么提交不了
31 
32 //打表法
33 #include<iostream>
34 #define M 500001
35 using namespace std;
36 
37 int a[M];
38 int main()
39 {
40     int i,j,n,t;
41     
42     for(i=1;i<=500000;i++)
43         for(j=i+i;j<=250001;j +=i)
44             a[j] +=i;
45     //while(scanf("%d",&t)!=EOF)
46     scanf("%d",&t);
47     
48         while(t--)
49         {
50             cin>>n;
51             cout<<a[n]<<endl;
52         }
53     
54     return 0;
55 }
56 */

这个题用一般的方法会超时,学到新的东西是

  m=(int)sqrt( double ( n ) );(将double类型的数转换为int型)
原文地址:https://www.cnblogs.com/mm-happy/p/3822649.html