zoukankan      html  css  js  c++  java
  • fzu 1753 质因数的应用

    Another Easy Problem
    Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u
    Submit Status

    Description

    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

    3
    100 1
    50 1
    60 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
    ",solve(t,MIN));
    87     }
    88     return 0;
    89 }
  • 相关阅读:
    CentOS 7 安装Hadoop前的SSH免密码登录配置
    CentOS 7.1下SSH远程登录服务器详解-转
    Linux系统下如何配置SSH_Centos7 ssh连接配置 CentOS7下安全配置
    如何在CentOS 7上修改主机名
    【转】CentOS 6.3(x86_64)下安装Oracle 10g R2
    【转】CentOS 6.3(x86_32)下安装Oracle 10g R2
    【转】Linux Oracle服务启动&停止脚本与开机自启动
    Cacti在selinux开启的情况下使用
    Nagios在selinux开启的情况下使用
    Nagios状态长时间处于Pending的解决方法
  • 原文地址:https://www.cnblogs.com/xiong-/p/3850810.html
Copyright © 2011-2022 走看看