C#,数值计算——Primpolytest的计算方法与源程序

news2024/11/23 9:16:43

1 文本格式

using System;

namespace Legalsoft.Truffer
{
    public class Primpolytest
    {
        private int N { get; set; } = 32;
        private int nfactors { get; set; } = 5;
        private ulong[] factors { get; set; }
        private int[] t { get; set; }
        private int[] a;
        private int[] p;

        public Primpolytest()
        {
            this.N = 32;
            this.nfactors = 5;
            this.factors = new ulong[nfactors];
            this.t = new int[N * N];
            this.a = new int[N * N];
            this.p = new int[N * N];
            ulong[] factordata = { 3, 5, 17, 257, 65537 };
            for (int i = 0; i < nfactors; i++)
            {
                factors[i] = factordata[i];
            }
        }

        public int ispident()
        {
            for (int i = 0; i < N; i++)
            {
                for (int j = 0; j < N; j++)
                {
                    if (i == j)
                    {
                        if (p[i * N + j] != 1)
                        {
                            return 0;
                        }
                    }
                    else
                    {
                        if (p[i * N + j] != 0)
                        {
                            return 0;
                        }
                    }
                }
            }
            return 1;
        }

        public void mattimeseq(int[] a, int[] b)
        {
            int[] tmp = new int[N * N];
            for (int i = 0; i < N; i++)
            {
                for (int j = 0; j < N; j++)
                {
                    int sum = 0;
                    for (int k = 0; k < N; k++)
                    {
                        sum += a[i * N + k] * b[k * N + j];
                    }
                    tmp[i * N + j] = sum & 1;
                }
            }
            for (int k = 0; k < N * N; k++)
            {
                a[k] = tmp[k];
            }
        }

        public void matpow(ulong n)
        {
            for (int k = 0; k < N * N; k++)
            {
                p[k] = 0;
            }
            for (int k = 0; k < N; k++)
            {
                p[k * N + k] = 1;
            }
            while (true)
            {
                if ((n & 1) != 0)
                {
                    mattimeseq(p, a);
                }
                n >>= 1;
                if (n == 0)
                {
                    break;
                }
                mattimeseq(a, a);
            }
        }

        public int test(ulong n)
        {
            ulong nn = n;
            ulong tnm1 = (ulong)(((ulong)1 << N) - 1);
            if (n > (ulong)(tnm1 >> 1))
            {
                throw new Exception("not a polynomial of degree N");
            }
            for (int k = 0; k < N * N; k++)
            {
                t[k] = 0;
            }
            for (int i = 1; i < N; i++)
            {
                t[i * N + (i - 1)] = 1;
            }
            int j = 0;
            while (nn != 0)
            {
                if ((nn & 1) != 0)
                {
                    t[j] = 1;
                }
                nn >>= 1;
                j++;
            }
            t[N - 1] = 1;
            for (int k = 0; k < N * N; k++)
            {
                a[k] = t[k];
            }
            matpow(tnm1);
            if (ispident() != 1)
            {
                return 0;
            }
            for (int i = 0; i < nfactors; i++)
            {
                ulong pow = tnm1 / factors[i];
                for (int k = 0; k < N * N; k++)
                {
                    a[k] = t[k];
                }
                matpow(pow);
                if (ispident() == 1)
                {
                    return 0;
                }
            }
            return 1;
        }
    }
}
 

2 代码格式

using System;

namespace Legalsoft.Truffer
{
    public class Primpolytest
    {
        private int N { get; set; } = 32;
        private int nfactors { get; set; } = 5;
        private ulong[] factors { get; set; }
        private int[] t { get; set; }
        private int[] a;
        private int[] p;

        public Primpolytest()
        {
            this.N = 32;
            this.nfactors = 5;
            this.factors = new ulong[nfactors];
            this.t = new int[N * N];
            this.a = new int[N * N];
            this.p = new int[N * N];
            ulong[] factordata = { 3, 5, 17, 257, 65537 };
            for (int i = 0; i < nfactors; i++)
            {
                factors[i] = factordata[i];
            }
        }

        public int ispident()
        {
            for (int i = 0; i < N; i++)
            {
                for (int j = 0; j < N; j++)
                {
                    if (i == j)
                    {
                        if (p[i * N + j] != 1)
                        {
                            return 0;
                        }
                    }
                    else
                    {
                        if (p[i * N + j] != 0)
                        {
                            return 0;
                        }
                    }
                }
            }
            return 1;
        }

        public void mattimeseq(int[] a, int[] b)
        {
            int[] tmp = new int[N * N];
            for (int i = 0; i < N; i++)
            {
                for (int j = 0; j < N; j++)
                {
                    int sum = 0;
                    for (int k = 0; k < N; k++)
                    {
                        sum += a[i * N + k] * b[k * N + j];
                    }
                    tmp[i * N + j] = sum & 1;
                }
            }
            for (int k = 0; k < N * N; k++)
            {
                a[k] = tmp[k];
            }
        }

        public void matpow(ulong n)
        {
            for (int k = 0; k < N * N; k++)
            {
                p[k] = 0;
            }
            for (int k = 0; k < N; k++)
            {
                p[k * N + k] = 1;
            }
            while (true)
            {
                if ((n & 1) != 0)
                {
                    mattimeseq(p, a);
                }
                n >>= 1;
                if (n == 0)
                {
                    break;
                }
                mattimeseq(a, a);
            }
        }

        public int test(ulong n)
        {
            ulong nn = n;
            ulong tnm1 = (ulong)(((ulong)1 << N) - 1);
            if (n > (ulong)(tnm1 >> 1))
            {
                throw new Exception("not a polynomial of degree N");
            }
            for (int k = 0; k < N * N; k++)
            {
                t[k] = 0;
            }
            for (int i = 1; i < N; i++)
            {
                t[i * N + (i - 1)] = 1;
            }
            int j = 0;
            while (nn != 0)
            {
                if ((nn & 1) != 0)
                {
                    t[j] = 1;
                }
                nn >>= 1;
                j++;
            }
            t[N - 1] = 1;
            for (int k = 0; k < N * N; k++)
            {
                a[k] = t[k];
            }
            matpow(tnm1);
            if (ispident() != 1)
            {
                return 0;
            }
            for (int i = 0; i < nfactors; i++)
            {
                ulong pow = tnm1 / factors[i];
                for (int k = 0; k < N * N; k++)
                {
                    a[k] = t[k];
                }
                matpow(pow);
                if (ispident() == 1)
                {
                    return 0;
                }
            }
            return 1;
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1044564.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

九日集训 LCR.190 加密运算

计算机安全专家正在开发一款高度安全的加密通信软件&#xff0c;需要在进行数据传输时对数据进行加密和解密操作。假定 dataA 和 dataB 分别为随机抽样的两次通信的数据量&#xff1a; 正数为发送量负数为接受量0 为数据遗失 请不使用四则运算符的情况下实现一个函数计算两次…

MySQL索引看这篇就够了

能简单说一下索引的分类吗&#xff1f; 例如从基本使用使用的角度来讲&#xff1a; 主键索引: InnoDB 主键是默认的索引&#xff0c;数据列不允许重复&#xff0c;不允许为 NULL&#xff0c;一个表只能有一个主键。唯一索引: 数据列不允许重复&#xff0c;允许为 NULL 值&…

Vue.js2+Cesium1.103.0 十二、绑定多个 DOM 弹窗,并跟随视角实时更新位置

Vue.js2Cesium1.103.0 十二、绑定多个 DOM 弹窗&#xff0c;并跟随视角实时更新位置 Demo 基于 element-ui 的 Message 封装一个自定义弹窗&#xff0c;添加到页面中&#xff0c;并实时更新位置。 <template><divid"cesium-container"style"width: 1…

【RocketMQ】浅谈消息发送机制

【RocketMQ】浅谈消息发送机制 参考资料&#xff1a; 消息发送核心参数与工作原理详解 RocketMQ消息发送流程 RocketMQ 消息发送 原理详解 源码剖析 结合实际应用场景谈消息发送 《RocketMQ技术内幕》 文章目录 【RocketMQ】浅谈消息发送机制一、认识RocketMQ消息——Message二…

java语言对异常处理运行的初步探索(try-catch-finally)

​​​​​​异常处理机制 java中的异常处理机制使得即使程序出现异常&#xff0c;代码也能够继续执行下去而不是直接退出程序。下面我们先来简单的了解一下异常处理是怎么使用。 在引用异常处理之前&#xff0c;代码运行中存在异常会导致JVM直接中断该程序并输出异常信息&am…

stack的使用以及模拟实现

&#x1f388;个人主页:&#x1f388; :✨✨✨初阶牛✨✨✨ &#x1f43b;强烈推荐优质专栏: &#x1f354;&#x1f35f;&#x1f32f;C的世界(持续更新中) &#x1f43b;推荐专栏1: &#x1f354;&#x1f35f;&#x1f32f;C语言初阶 &#x1f43b;推荐专栏2: &#x1f354;…

活动预告|Dragonfly 与你相约 2023 KubeCon Shanghai!

KubeCon CloudNativeCon Open Source Summit China 2023&#xff0c;由 Linux 基金会、CNCF 主办&#xff0c;将在 9 月 26-28 日于上海跨国采购会展中心盛大开幕。本次峰会将聚集全球社区&#xff0c;共同探讨云原生和开源领域的前沿洞察、核心技术与最佳实践&#xff0c;会…

Java基于SpringBoot的藏区特产销售系统的研究与实现

今天为大家带来的是基于 Java SpringBootVue 的藏区特产销售系统&#xff0c;大家有兴趣的可以看一下 博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W,Csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 文章目…

ruoyi(若依)接口拦截路径配置,接口访问要授权,放开授权直接访问

1.找到文件SecurityConfig.java文件&#xff0c;里面配置相应的放行路径

[计算机入门] Windows附件程序介绍(办公类)

3.13 Windows附件程序介绍(办公类) 3.13.1 写字板 Windows系统中的写字板程序是一款简单而实用的文本编辑工具&#xff0c;它被广泛应用于快速记录笔记、绘制草图和进行简单的文档编辑。以下是写字板程序的主要功能和作用&#xff1a; 文本输入和编辑&#xff1a;写字板程序允…

数据结构-----二叉树的创建和遍历

目录 前言 二叉树的链式存储结构 二叉树的遍历 1.前序遍历 2.中序遍历 3.后序遍历 二叉树的创建 创建一个新节点的函数接口 1.创建二叉树返回根节点 2.已有根节点&#xff0c;创建二叉树 3.已有数据&#xff0c;创建二叉树 前言 在此之前我们学习了二叉树的定义和储…

HTML5+CSS3小实例:脉冲波纹催眠动画特效

实例:脉冲波纹催眠动画特效 技术栈:HTML+CSS 效果: 源码: 【html】 <!DOCTYPE html> <html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"><meta name="viewport" content=&qu…

ThingsBoard 前端项目背景图片部件开发

前言 ThingsBoard 是目前 Github 上最流行的开源物联网平台&#xff08;14.4k Star&#xff09;&#xff0c;可以实现物联网项目的快速开发、管理和扩展, 是中小微企业物联网平台的不二之选。 本文介绍如何在 ThingsBoard 前端项目中开发背景图片部件。 产品需求 最近接到产…

掌握可扩展和可维护应用程序:12-Factor应用程序开发的全面指南

1*vhxOhTuKSyuuAKu-nUQ5SA.jpeg 在今天的快节奏世界中&#xff0c;软件开发人员需要创建可扩展、可维护和适应性强的应用程序。12-Factor应用程序方法论是一组最佳实践&#xff0c;可以帮助开发人员实现这些目标。 本文深入探讨了12个因素&#xff0c;详细解释了它们的重要性以…

python 深度学习 解决遇到的报错问题5

目录 一、conda安装shapefile失败 二、conda安装osmnx失败&#xff1a;To search for alternate channels that may provide the conda package yourelooking for, navigate to 三、ERROR: Could not build wheels for llvmlite, which is required to install pyproject.to…

算法基础--位运算

一、常见位运算总结&#xff1a; 1、基础位运算&#xff08;^&#xff09; 其中异或^有2种理解。 2、位图bitset相关&#xff08;&|&#xff09; test判断第x位是1函数0: 可以让n右移&#xff0c;也可以让1左移&#xff0c;习惯上选择第一种 (n>>x)&1 判…

初创企业应该选一款怎样的客服系统?

互联网经济时代的飞速发展&#xff0c;促使客户市场对于企业服务的要求越来越高。客户在选择产品的时候已经不单单却决于产品功能和价格&#xff0c;客户服务也是其关注的重点。 优质的客户服务所带来的是客户满意度的提升&#xff0c;以及品牌影响力的提高。所以&#xff0c;…

Linux 服务器下 pypy 下载数据集

Linux 服务器下 pypy 下载数据集 安装 pip install bypy链接自己的百度网盘 命令行直接输入 byby info 就行 byby info查看网盘里面的内容 bypy listbyby list 只显示自动生成的bypy中的文件&#xff0c;上传也是在这个目录中&#xff0c;可以自己在里面新建文件夹 4. 上传…

tsar-性能监控工具

简介 tsar是淘宝自己开发的一个采集工具&#xff0c;主要用来收集服务器的系统信息&#xff08;如cpu&#xff0c;io&#xff0c;mem&#xff0c;tcp等&#xff09;&#xff0c;以及应用数据&#xff08;如squid haproxy nginx等&#xff09;。收集到的数据存储在磁盘上&#…

SMOKE-CMAQ实践技术应用

大气污染物排放是空气污染的源头&#xff0c;气象因素是影响污染程度的重要因素&#xff0c;因此空气质量模式要求气象资料和污染物排放清单作为输入&#xff0c;其中由于大气污染源复杂性、数据滞后性、动态变化、规律性不明显等特点&#xff0c;使得大气污染源排放清单输入准…