首页 > 代码库 > fzu 1753 质因数的应用
fzu 1753 质因数的应用
Another Easy Problem
Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64uDescription
xtt最近学习了高斯消元法解方程组,现在他的问题来了,如果是以下的方程,那么应该如何解呢?
C(n1,m1)==0 (mod M)
C(n2,m2)==0 (mod M)
C(n3,m3)==0 (mod M)
................
C(nk,mk)==0 (mod M)
xtt希望你告诉他满足条件的最大的M
其中C(i,j)表示组合数,例如C(5,2)=10,C(4,2)=6...
Input
输入数据包括多组,每组数据的第一行是一个正整数T(1<=T<=150)表示接下来描述的T个方程
接下来T行,每行包括2个正整数ni,mi (1<=mi<=ni<=100000)
Output
输出一行答案,表示满足方程组的最大M。
Sample Input
3100 150 160 1
Sample Output
10
1 #include <iostream> 2 #include <cmath> 3 #include <cstdio> 4 #include <cstring> 5 using namespace std; 6 7 typedef __int64 LL; 8 const int maxn=1e5+5; 9 int prime[10000],num,n[200],m[200];10 bool flag[maxn];11 12 void init()13 {14 memset(flag,true,sizeof(flag));15 int i,j;num=0;16 for(i=2;i<maxn;i++)17 {18 if(flag[i]) prime[num++]=i;19 for(j=0;j<num&&i*prime[j]<maxn;j++)20 {21 flag[i*prime[j]]=false;22 if(i%prime[j]==0) break;23 }24 }25 }26 27 int factor(int a,int b)28 {29 int sum=0;30 while(b)31 {32 sum+=b/a;33 b/=a;34 }35 return sum;36 }37 38 int getfactor(int i,int j)39 {40 int sum=factor(prime[i],n[j]);41 sum-=factor(prime[i],m[j]);42 sum-=factor(prime[i],n[j]-m[j]);43 return sum;44 }45 46 LL mypow(LL a,LL b)47 {48 LL ret=1;49 while(b)50 {51 if(b&1) ret*=a;52 a*=a;53 b>>=1;54 }55 return ret;56 }57 58 LL solve(int n,int MAX)59 {60 LL ans=1;61 for(int i=0;i<num&&prime[i]<=MAX;i++)62 {63 int min=10000,c;64 for(int j=0;j<n;j++)65 {66 c=getfactor(i,j);67 min=min<c?min:c;68 }69 ans*=mypow(prime[i],min);70 }71 return ans;72 }73 74 int main()75 {76 init();77 int i,t,MIN;78 while(~scanf("%d",&t))79 {80 MIN=1e9;81 for(i=0;i<t;i++)82 {83 scanf("%d %d",n+i,m+i);84 MIN=MIN<n[i]?MIN:n[i];85 }86 printf("%I64d\n",solve(t,MIN));87 }88 return 0;89 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。