码迷,mamicode.com
首页 > 其他好文 > 详细

hdu--5108--数论

时间:2014-11-22 22:56:41      阅读:288      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   io   ar   color   os   sp   for   

数据因为很大 达到 max=1e9

首先 素数筛选出 sqrt(max)的范围内有多少素数

然后 对于每个n  求出它的所有因子 sort一遍后 从小到大开始遍历过去

特判下 对于n大于 sqrt(max)的情况下 是否为素数的情况 因为N>1e6的情况不超过100组 所以不会特判很多次的

 

bubuko.com,布布扣
 1 #include <iostream>
 2 #include <vector>
 3 #include <cstring>
 4 #include <algorithm>
 5 using namespace std;
 6 
 7 const int size = 100000;
 8 bool vis[size+10];
 9 vector<int>ve;
10 
11 void init( )
12 {
13     memset( vis , true , sizeof(vis) );
14     vis[0] = vis[1] = false;
15     for( int i = 2 ; i<=size ; i++ )
16     {
17         if( vis[i] )
18         {
19             int j = i * 2;
20             while( j<=size )
21             {
22                 vis[j] = false;
23                 j += i;
24             }
25         }
26     }
27 }
28 
29 void solve( int n )
30 {
31     ve.clear();
32     for( int i = 1 ; i*i<=n ; i++ )
33     {
34         if( n%i==0 )
35         {
36             ve.push_back( i );
37             if( i*i!=n )
38                 ve.push_back( n/i );
39         }
40     }
41     sort( ve.begin() , ve.end() );
42 }
43 
44 bool judge( int x )
45 {
46     if( x%2==0 )
47         return false;
48     for( int i = 3 ; i*i<=x ; i+=2 )
49     {
50         if( x%i==0 )
51             return false;
52     }
53     return true;
54 }
55 
56 int main()
57 {
58     int n , ans , cnt;
59     bool flag;
60     init( );
61     while( ~scanf("%d",&n) )
62     {
63         solve( n );
64         cnt = ve.size();
65         ans = 0;
66         flag = false;
67         for( int i = 0 ; i<cnt ; i++ )
68         {
69             if( n/ve[i]>size )
70             {
71                 flag = judge( n/ve[i] );
72                 if( flag )
73                 {
74                     ans = ve[i];
75                     break;
76                 }
77             }
78             else if( vis[ n/ve[i] ] )
79             {
80                 ans = ve[i];
81                 break;
82             }
83         }
84         printf( "%d\n",ans );
85     }
86     return 0;
87 }
View Code

 

hdu--5108--数论

标签:style   blog   http   io   ar   color   os   sp   for   

原文地址:http://www.cnblogs.com/radical/p/4115796.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!