2011年5月27日

HDU 3006 The Number of set

摘要: 转自:http://zc634579757.blog.163.com/blog/static/1244974622009716104841721/这题真是让我看到了位运算和状压DP的神奇之处! 这题就是用一个二进制数保存一个集合的元素 比如一个集合中有两个元素 1 3 那就用5 (101)表示这个集合就是用0 1 来表示这个集合中一个数存不存在 再比如 一个集合有三个元素 1 4 5 就在这几个位子上标为1,那就用25 (11001)来表示这个集合!在借助于位运算的或( | )就可已达到合并集合的目的,比如一个集合(14 )和一个集合(1 2 3)进行合并 那就是 (9)1001 | 111( 阅读全文

posted @ 2011-05-27 18:02 lonelycatcher 阅读(683) 评论(2) 推荐(0) 编辑

快速幂取余

摘要: 快速幂取模算法,留着以后慢慢研究long long modExp(long long a,long long b,long long n){ long long t,y; t = 1; y = a; while(b){ if(b % 2) t = t * y % n; y = y * y % n; b >>= 1; } return t;} 阅读全文

posted @ 2011-05-27 14:07 lonelycatcher 阅读(672) 评论(0) 推荐(0) 编辑

2011年5月25日

HDU 2136 largest prime factor

摘要: <code>#include<stdio.h>__int64 n;__int64 prime[1000000];int main(){ __int64 i,j; __int64 locate=0; for(i=2;i<1000000;i++) { if(prime[i]==0) { locate++; for(j=i;j<1000000;j+=i) { prime[j]=locate; } } } while(scanf("%I64d",&n)!=EOF) { printf("%I64d\n",prime[n] 阅读全文

posted @ 2011-05-25 20:40 lonelycatcher 阅读(239) 评论(0) 推荐(0) 编辑

线性素数打表

摘要: 转自:http://blog.sina.com.cn/s/blog_787c1f7b0100s0yx.html参考链接:http://leonbule.blogbus.com/logs/5342169.htmlhttp://kmplayer.javaeye.com/blog/606352原理:1. 任何一个合数都可以表示成一个质数和一个数的乘积2. 假设A是一个合数,且A = x * y,这里x也是一个合数,那么有:A = x * y; (假设y质数,x合数)x = a * b; (假设a是质数,且a < x)-> A = a * b * y = a * Z (Z = b * y) 阅读全文

posted @ 2011-05-25 20:05 lonelycatcher 阅读(580) 评论(0) 推荐(0) 编辑

2011年5月24日

HDU 1061 Rightmost Digit

摘要: 这道题看起来很吓人,数据量也很大,其实是有技巧的,最后一位就是N对10取模以后的N次方的最后一位,有10中可能,即从0到9,而观察可以发现,0到9这10个数不断的与自己相乘,最后一位是有周期的,下面的就很简单了#include<iostream>using namespace std;long long N;int main(){ int T; cin>>T; while(T--) { cin>>N; if(N==0||N%10==1) { cout<<1<<endl; continue; } int mod=N%10; if(mod 阅读全文

posted @ 2011-05-24 17:11 lonelycatcher 阅读(170) 评论(0) 推荐(0) 编辑

导航