HDU
来源:互联网 发布:java 数据 hadoop 开发 编辑:程序博客网 时间:2024/06/04 19:00
具体可以参考http://www.cnblogs.com/kane0526/archive/2013/03/14/2795446.html
写的挺好的。。
先是比较基础的,
int prime[100];LL gao(LL n,LL m){ int pn=0; for(LL i=2;i*i<=m;++i){//求一个数的质因数的模板 if(m%i)continue; while(m%i==0)m/=i; prime[pn++]=i; } if(m!=1)prime[pn++]=m; int g=(1<<pn); LL ret=0; for(LL i=1;i<g;++i){ int tmp=i,k=0,num=1; for(int j=0;j<pn;++j){ if(tmp&1)k++,num*=prime[j]; tmp>>=1; } if(k&1)ret+=n/num; else ret-=n/num; } return n-ret;}int main(){ int cas=0; int T;sf("%d",&T); while(T--){ LL a,b,n; sf("%lld%lld%lld",&a,&b,&n); LL ans=gao(b,n)-gao(a-1,n); pf("Case #%d: %lld\n",++cas,ans); }}
参考http://blog.csdn.net/acm_cxlove/article/details/7877440
然后是hdu1796的应用:其实就只是要看出
发现如果A1/B1=A2/B2那么就有一棵树看不到,所以就是找出Ai/Bi有多少种。
再可以发现A/B中,如果A,B有大于1的公约数,则A=A’*D B=B’*D,那么A/B=A’/B’,也就是存在另外一组数和这种相等,则问题转换成有多少对互质的数,枚举i,从1-M中找与i互质的数,其中1<=i<=N。
怕手生,写了个dfs版的,
居然没有快。。J
int n,m;int prime[8];LL ret;int pn;void dfs(int pos,LL now ,int step){ if(pos>pn)return ; if(step&1)ret+=m/now; else ret-=m/now; for(int i=pos+1;i<pn;++i){ dfs(i,now*prime[i],step+1); }}LL gao(int n,int m){ pn=0; for(int i=2;i*i<=m;++i){//求一个数的质因数的模板 if(m%i)continue; while(m%i==0)m/=i; prime[pn++]=i; } if(m!=1)prime[pn++]=m; ret=0; for(int i=0;i<pn;++i){ dfs(i,prime[i],1); } return n-ret;}int main(){ int T;sf("%d",&T); while(T--){ sf("%d%d",&n,&m); LL ans=0; for(int i=1;i<=n;++i){ ans+=gao(m,i); } pf("%lld\n",ans); }}
然后第三题也差不多。。。
const int maxn=100005;bool color[maxn];int f[maxn], phi[maxn];int prime[maxn];void Eular() //欧拉函数{ phi[1]=1; int k, num=0; memset(color,false,sizeof(color)); for(int i=2; i<maxn; i++) { if(!color[i]) { f[num++]=i; phi[i]=i-1; } for(int j=0; j<num&&(k=i*f[j])<maxn; j++) { color[k]=true; if(i%f[j]==0) { phi[k]=phi[i]*f[j]; break; } else phi[k]=phi[i]*(f[j]-1); } }}LL gao(int n,int m){ int pn=0; for(int i=2;i*i<=m;++i){ if(m%i)continue; while(m%i==0)m/=i; prime[pn++]=i; } if(m!=1)prime[pn++]=m; LL ret=0; int g=(1<<pn); for(int i=1;i<g;++i){ int tmp=i,k=0,num=1; for(int j=0;j<pn;++j){ if(tmp&1)k++,num*=prime[j]; tmp>>=1; } if(k&1)ret+=n/num; else ret-=n/num; } return n-ret;}int main(){ int T;sf("%d",&T); int cas=0; Eular(); while(T--){ ans=0; sf("%d%d%d%d%d",&a,&b,&c,&d,&k); if(k==0||k>b||k>d){pf("Case %d: 0\n",++cas);continue ;} b/=k;d/=k; if(b>d)swap(b,d); for(int i=1;i<=b;++i){ ans+=phi[i]; } for(int i=b+1;i<=d;++i){ ans+=gao(b,i); } pf("Case %d: %lld\n",++cas,ans); }}
阅读全文
0 0
- hdu
- hdu
- HDU
- hdu ()
- hdu
- hdu
- HDU
- HDU
- hdu
- hdu
- HDU
- Hdu
- hdu
- hdu-
- hdu
- hdu
- hdu
- HDU
- [leetcode]115. Distinct Subsequences
- [第七季]7.实现DIV的其他动画效果
- 关于Hiberlate插入数据源的问题
- 企业网络安全观——给高管们的网络安全建议
- RE:JAVA-了解多态+内部类用法
- HDU
- 匿名内部类
- 2018校招(BAT机器学习)要求
- 最近执行较慢的SQL
- 【typical】【JZOJ 5271】 神奇的救火现场
- nginx配置url转发
- 操作系统原理学习笔记(3)之进程操作与进程通信(关键词:操作系统原理学习笔记)
- 利用freemarker 静态化网页
- android应用百度语音识别、语音合成和语音唤醒