首页 > 代码库 > hdu1215

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
321020
 
Sample Output
1822
 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 50000135 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型)