AKS 素性测试 算法整理

namespace AKSTest;

using System;
using System.Numerics;

public class AksTest
{

    public static void Main(string[] args)
    {
        const long m = 20;
        for (var n = 0; n < m; n++)
        {
            Console.Write($"(x-1)^{n} = ");
            Show(n);
            Console.WriteLine();
        }
        Console.Write("Primes:");
        for (var n = 1; n <= m; n++)
            if (IsPrime(n))
                Console.Write(n + " ");

        Console.WriteLine();
        Console.ReadLine();
    }

    public static void Coef(BigInteger[] c, long n)
    {
        c[0] = 1L;
        for (var i = 0L; i < n; i++)
        {
            var j = i;

            c[1 + j] = 1L;

            for (; j > 0; j--)
                c[j] = c[j - 1] - c[j];

            c[0] = -c[0];
        }
    }
    public static void Show(long n)
    {
        var c = new BigInteger[n + 1];

        Coef(c, n);
        var f = true;
        do
        {
            Console.Write($"{(c[n] > 0 && !f ? "+" : "")}{c[n]}*x^{n}");
            f = false;
        } while (n-- != 0);
    }
    public static bool IsPrime(long n)
    {
        if (n <= 1) return false;
        var c = new BigInteger[n + 1];
        var i = 0L;
        c[0] = 1L;
        for (; i < n; i++)
        {
            var j = i;
            c[1 + j] = 1L;
            for (; j > 0; j--)
            {
                c[j] = c[j - 1] - c[j];
            }
            c[0] = -c[0];
        }
        c[0] += 1;
        c[n] -= 1;
        i = (n >> 1) + 1;
        while (i-- != 0 && (c[i] % n) == 0) ;
        return i < 0;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值