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

hdu 2197 本原串

时间:2014-10-20 21:06:04      阅读:149      评论:0      收藏:0      [点我收藏+]

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

http://acm.hdu.edu.cn/showproblem.php?pid=2197

长度为n的01串有2的n次方个,再减去不符合要求的。不符合要求的字符串就是长度为n的约数的字符串。 递归处理,然后用map映射记录求出的每一个数的值,为以后再次输入处理过的数,就可以直接输出,不用递归处理。

bubuko.com,布布扣
 1 #include <cstdio>
 2 #include <cstring>
 3 #include <map>
 4 #define ll long long
 5 #include <algorithm>
 6 using namespace std;
 7 
 8 ll n;
 9 map<ll,ll>q;
10 
11 ll quickmod(ll a,ll b,ll m)
12 {
13     ll ans = 1;
14     ll c=a%m;
15     while(b)
16     {
17         if(b&1)
18         {
19             ans = (ans*c)%m;
20             b--;
21         }
22         b/=2;
23         c = c*c%m;
24     }
25     return ans;
26 }
27 
28 ll Get_num(int n)
29 {
30     if(q[n]!=0)
31     {
32         return q[n];
33     }
34     else
35     {
36         ll ans=quickmod(2,n,2008);
37         ans-=2;
38         ans%=2008;
39         for(int i=2; i*i<=n; i++)
40         {
41             if(n%i!=0) continue;
42             if(i*i==n)
43             {
44                 ans-=Get_num(i);
45                 ans%=2008;
46             }
47             else
48             {
49                 ans-=Get_num(i);
50                 ans-=Get_num(n/i);
51                 ans%=2008;
52             }
53         }
54         ans=(ans+2008)%2008;
55         q[n]=ans;
56         return ans;
57     }
58 }
59 int main()
60 {
61     q[1]=2;
62     while(scanf("%lld",&n)!=EOF)
63     {
64         printf("%lld\n",Get_num(n));
65     }
66     return 0;
67 }
View Code

 

hdu 2197 本原串

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

原文地址:http://www.cnblogs.com/fanminghui/p/4038398.html

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