七夕节 |
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型)
时间: 2024-11-04 23:21:27