日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

洛谷 1072 Hankson 的趣味题——质因数界限讨论

發布時間:2025/3/21 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 洛谷 1072 Hankson 的趣味题——质因数界限讨论 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目:https://www.luogu.org/problemnew/show/P1072

思路是把每個數質因數分解,答案對于每個質因數的次數有選擇的區間,通過這個計算。

指數的限制就是上限是b1,下限是a1;a0-a1后有剩余的自己不能有;b1-b0有剩余的自己不能剩(即必須滿上限)。

分解質因數用了那個好像是 O( n^(1/4) ) 的方法。其實如果給的都是大質數是不是會被卡?

然后寫了無比冗長的代碼。

#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int N=35; int T,a0,a1,b0,b1,p[N],tot,hi[N],lo[N],hi2[N],lo2[N],lm[N],ans; bool flag=0; int rdn() {int ret=0;bool fx=1;char ch=getchar();while(ch>'9'||ch<'0'){if(ch=='-')fx=0;ch=getchar();}while(ch>='0'&&ch<='9') ret=(ret<<3)+(ret<<1)+ch-'0',ch=getchar();return fx?ret:-ret; } int main() {T=rdn();while(T--){a0=rdn(); a1=rdn(); b0=rdn(); b1=rdn();int n=b1; tot=0;//limitfor(int i=2;i*i<=n;i++){if(n%i==0){p[++tot]=i;lo[tot]=hi[tot]=lo2[tot]=hi2[tot]=0;while(n%i==0)n/=i,hi[tot]++;hi2[tot]=hi[tot];}}if(n>1){p[++tot]=n;lo[tot]=hi[tot]=lo2[tot]=hi2[tot]=0;hi[tot]=hi2[tot]=1;}flag=0;n=a1; int p0=1;//bottomfor(int i=2;i*i<=n;i++)if(n%i==0){int d=0;while(n%i==0)n/=i,d++;while(p0<tot&&p[p0]<i)p0++;if(p[p0]!=i){flag=1;break;}lo[p0]=d;}if(flag){puts("0");continue;}if(n>1){while(p0<tot&&p[p0]<n)p0++;if(p[p0]==n)lo[p0]=1;}flag=0;for(int i=1;i<=tot;i++)if(hi[i]<lo[i]){flag=1;break;}if(flag){puts("0");continue;}n=b0; p0=1;for(int i=2;i*i<=n;i++){if(n%i==0){int d=0;while(n%i==0)n/=i,d++;while(p0<tot&&p[p0]<i)p0++;if(p[p0]!=i)continue;lo2[p0]=d;//can't leave }}if(n>1){while(p0<tot&&p[p0]<n)p0++;if(p[p0]==n) lo2[p0]=1;}for(int i=1;i<=tot;i++){int d=hi[i]-lo2[i];if(d) lo2[i]=hi[i]; else lo2[i]=0;}n=a0; p0=1;for(int i=2;i*i<=n;i++){if(n%i==0){int d=0;while(n%i==0)n/=i,d++;while(p0<tot&&p[p0]<i)p0++;if(p[p0]!=i)continue;if(d>lo[p0])hi2[p0]=lo[p0];//can't exist }}if(n>1){while(p0<tot&&p[p0]<n)p0++;if(p[p0]==n)if(1>lo[p0])hi2[p0]=lo[p0];}for(int i=1;i<=tot;i++)hi[i]=min(hi[i],hi2[i]),lo[i]=max(lo[i],lo2[i]);ans=1; flag=1;for(int i=1;i<=tot;i++){if(lo[i]>hi[i]){flag=0;break;}ans*=hi[i]-lo[i]+1;}printf("%d\n",flag?ans:0);}return 0; }

?

轉載于:https://www.cnblogs.com/Narh/p/9762154.html

總結

以上是生活随笔為你收集整理的洛谷 1072 Hankson 的趣味题——质因数界限讨论的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。