6. 模(Mod)指數計算 X^P (mod N)

# 勉強用到,雖然有點投機

namespace Q6
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            // A = B % N
            // then: 
            //   a. A+Y=(B+Y)%N
            //   b. AX=BX%N
            //   c. (B%N)^P=B^P

            var X = int.Parse(textBox1.Text);
            var P = int.Parse(textBox2.Text);
            var N = int.Parse(textBox3.Text);

            label3.Text = "餘數 = " + calc(X % N, P, N);
        }

        int calc(int X, int P, int N)
        {
            if (P == 1) return X;
            if (P % 2 == 1)
                return calc(X, P - 1, N) * X % N;
            var k = calc(X, P / 2, N) % N;
            return k * k % N;
        }

        private void button3_Click(object sender, EventArgs e)
        {
            Close();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            textBox1.Clear();
            textBox2.Clear();
            textBox3.Clear();
            label3.Text = "餘數 = ";
        }
    }
}

}

Last updated