当前位置:新2彩票 > 户外体育 > 天速乒球地板TS500,分支语句switch

天速乒球地板TS500,分支语句switch

文章作者:户外体育 上传时间:2019-12-23

天速乒乓球地板TS500

console.ReadLine();

扩展中国剩余定理详解,中国定理详解

●TPU表层超强耐磨防滑处理 ●高强度聚脂网格布稳定层

}

前言

阅读本文前,推荐先学一下中国剩余定理。其实不学也无所谓,毕竟两者没啥关系

宝石红 长20m×宽1.8m×厚5.0mm

  int cs=1;

扩展CRT

我们知道,中国剩余定理是用来解同余方程组

$$begin{cases}xequiv c_{1}left( mod m_{1}right) \ xequiv c_{2}left( mod m_{2}right) \ ldots \ xequiv c_rleft( mod m_rright) end{cases}$$

但是有一个非常令人不爽的事情就是它要求$m_1,m_2ldots,m_r$两两互素

如果某个毒瘤出题人偏要求它们部互素呢?

其实也有解决的办法

就是把出题人吊起来干一顿用扩展中国剩余定理

扩展中国剩余定理跟中国剩余定理没半毛钱关系,一个是用扩展欧几里得,一个是用构造

 

首先我们还是从简单入手,考虑一下如果同余方程组只有两个式子的情况

$xequiv c_{1}left( mod m_{1}right) \ xequiv c_{2}left( mod m_{1}right)$

将两个式子变形

$x=c_{1}+m_{1}k_{1}\ x=c_{2}+m_{2}k_{2}$

联立

$c_{1}+m_{1}k_{1}=c_{2}+m_{2}k_{2}$

移项

$m_{1}k_{1}=c_{2}-c_{1}+m_{2}k_{2}$

我们用$(a,b)$表示$a,b$的最大公约数

在这里需要注意,这个方程有解的条件是

$left( m_{1},m_{2}right) |left( c_{2}-c_{1}right)$,因为后面会用到$dfrac {left( c_{2}-c_{1}right) }{left( m_{2},m_{1}right) }$这一项,如果不整除的话肯定会出现小数。

对于上面的方程,两边同除$(m_1,m_2)$

$$dfrac {m_{1}k_{1}}{left( m_{1},m_{2}right) }=dfrac {c_{2}-c_{1}}{left( m_{1},m_{2}right) }+dfrac {m_{2}k_{2}}{left( m_{1},m_{2}right) }$$

$$dfrac {m_{1}}{left( m_{1},m_{2}right) }k_{1}=dfrac {c_{2}-c_{1}}{left( m_{1},m_{2}right) }+dfrac {m_{2}}{left( m_{1},m_{2}right) }k_{2}$$

转换一下

$$dfrac {m_{1}}{left( m_{1},m_{2}right) }k_{1} equiv dfrac {c_{2}-c_{1}}{left( m_{1},m_{2}right) } (mod dfrac {m_{2}}{left( m_{1},m_{2}right) })$$

此时我们已经成功把$k_2$消去了。

同余式两边同除$dfrac {m_{1}}{left( m_{1},m_{2}right) }$

$$k_1equiv inv({m_1over(m_1,m_2)},{m_2over (m_1,m_2)})*{(c_2-c_1)over (m_1,m_2)}pmod {{m_2over(m_1,m_2)}}$$

$inv(a,b)$表示$a$在模$b$意义下的逆元

$$k_1=inv({m_1over(m_1,m_2)},{m_2over (m_1,m_2)})*{(c_2-c_1)over (m_1,m_2)}+{{m_2over (m_1,m_2)}}*y$$

接下来怎么办呢?这个式子已经化到最简了。。

不要忘了,我们刚开始还有两个式子。我们把$k_1$待回去!

$$x=inv({m_1over(m_1,m_2)},{m_2over (m_1,m_2)})*{(c_2-c_1)over (m_1,m_2)}*m_1+y{{m_1m_2over (m_1,m_2)}}+c_1$$

$$xequiv inv({m_1over(m_1,m_2)},{m_2over (m_1,m_2)})*{(c_2-c_1)over (m_1,m_2)}*m_1+c_1pmod {{m_1m_2over (m_1,m_2)}}$$

此时,整个式子中的元素我们都已经知道了

具体一点,这个式子可以看做是$$xequiv cpmod m$$

其中$$c=(inv({m_1over (m_1,m_2)},{m_2over (m_1,m_2)})*{(c_2-c_1)over (m_1,m_2)})%{m_2over (m_1,m_2)}*m_1+c_1$$

$$m={m_1m_2over (m_1,m_2)}$$

 

推广一下

我们每次把两个同余式合并,求解之后得到一个新的同余式。再把新的同余式和其他的联立,最终就可以求出满足条件的解

 

 

代码

题目链接

#include<iostream>
#include<cstdio>
#define LL long long 
using namespace std;
const LL MAXN=1e6+10;
LL K,C[MAXN],M[MAXN],x,y;
LL gcd(LL a,LL b)
{
    return b==0?a:gcd(b,a%b);
}
LL exgcd(LL a,LL b,LL &x,LL &y)
{
    if(b==0){x=1,y=0;return a;}
    LL r=exgcd(b,a%b,x,y),tmp;
    tmp=x;x=y;y=tmp-(a/b)*y;
    return r;
}
LL inv(LL a,LL b)
{
    LL r=exgcd(a,b,x,y);
    while(x<0) x+=b;
    return x;
}
int main()
{
    #ifdef WIN32
    freopen("a.in","r",stdin);
    #else
    #endif
    while(~scanf("%lld",&K))
    {
        for(LL i=1;i<=K;i++) scanf("%lld%lld",&M[i],&C[i]);
        bool flag=1;
        for(LL i=2;i<=K;i++)
        {
            LL M1=M[i-1],M2=M[i],C2=C[i],C1=C[i-1],T=gcd(M1,M2);
            if((C2-C1)%T!=0) {flag=0;break;}
            M[i]=(M1*M2)/T;
            C[i]= ( inv( M1/T , M2/T ) * (C2-C1)/T ) % (M2/T) * M1 + C1;
            C[i]=(C[i]%M[i]+M[i])%M[i];
        }
        printf("%lldn",flag?C[K]:-1);
    }
    return 0;
}

 

 

再放道裸题

题解

前言 阅读本文前,推荐先学一下中国剩余定理。其实不学也无所谓,毕竟两者没啥关系 扩展CRT 我们...

    }

//输入日期,判断是今年的第几天············
//1 3 5 7 8 10 12
//4 6 9 11
//2
int m1 = 31, m3 = 31, m5 = 31, m7 = 31, m8 = 31, m10 = 31, m12 = 31, m4 = 30, m6 = 30, m9 = 30, m11 = 30, m2 = 28;
Console.WriteLine("输入要查询的月份");
int m = int.Parse(Console.ReadLine());
Console.WriteLine("输入要查询的日期");
int day = int.Parse(Console.ReadLine());
switch (m)
{
case 1:
Console.WriteLine("您输入的日期是" + m + "-" + day + "是今年的第" + day

         Console.WriteLine("case 2");

       //case 后加空格,之后写上跟上面小括号内对应类型可能出现的值

      case 1://cs值为1,则进行着一步,显示case 1

         Console.WriteLine("case 1");

练习

         Console.WriteLine("default case ");

  switch(cs)//小括号内是一个数据类型的值

 

Console.WriteLine("您输入的日期是" + m + "-" + day + "是今年的第" + (m1

          break;

{

  //switch case 多用于年月日的计算

      default://如果值跟上面的case 1,case 2都不匹配,则进行这一步

      case 2:

  • "天");
    break;
    case 2:
    Console.WriteLine("您输入的日期是" + m + "-" + day + "是今年的第" + (m1
  • day) + "天");
    break;
    case 3:

          break;//距离break最近的大括号,跳出这个大括号,执行大括号之后的命令

  • m2 + day) + "天");
    break;
    case 4:
    Console.WriteLine("您输入的日期是" + m + "-" + day + "是今年的第" + (m1
  • m2 + m3 + day) + "天");
    break;
    case 5:
    Console.WriteLine("您输入的日期是" + m + "-" + day + "是今年的第" + (m1
  • m2 + m3 + m4 + day) + "天");
    break;
    case 6:
    Console.WriteLine("您输入的日期是" + m + "-" + day + "是今年的第" + (m1
  • m2 + m3 + m4 + m5 + day) + "天");
    break;
    case 7:
    Console.WriteLine("您输入的日期是" + m + "-" + day + "是今年的第" + (m1
  • m2 + m3 + m4 + m5 + m6 + day) + "天");
    break;
    case 8:
    Console.WriteLine("您输入的日期是" + m + "-" + day + "是今年的第" + (m1
  • m2 + m3 + m4 + m5 + m6 + m7 + day) + "天");
    break;
    case 9:
    Console.WriteLine("您输入的日期是" + m + "-" + day + "是今年的第" + (m1
  • m2 + m3 + m4 + m5 + m6 + m7 + m8 + day) + "天");
    break;
    case 10:
    Console.WriteLine("您输入的日期是" + m + "-" + day + "是今年的第" + (m1
  • m2 + m3 + m4 + m5 + m6 + m7 + m8 + m9 + day) + "天");
    break;
    case 11:
    Console.WriteLine("您输入的日期是" + m + "-" + day + "是今年的第" + (m1
  • m2 + m3 + m4 + m5 + m6 + m7 + m8 + m9 + m10 + day) + "天");
    break;
    case 12:
    Console.WriteLine("您输入的日期是" + m + "-" + day + "是今年的第" + (m1
  • m2 + m3 + m4 + m5 + m6 + m7 + m8 + m9 + m10 + m11 + day) + "天");
    break;
    default:
    Console.WriteLine("您的输入有误");
    break;
    }

    {

 

static void Main(string[]args )

Switch case必须与break一起使用

         break;

Break 是跳转语句。与switch case连用的时候是跳出最近的{}。

本文由新2彩票发布于户外体育,转载请注明出处:天速乒球地板TS500,分支语句switch

关键词: