模板 - 二次剩余

又被二次剩余调教了。

以下,p是奇质数。

如果存在一个x,使得 \(x^2=n\; mod \; p\) ,则n是p的一个二次剩余。

勒让德符号: \((\frac{n}{p})\)

当n是p的二次剩余, \((\frac{n}{p})=1\)
当n不是p的二次剩余, \((\frac{n}{p})=-1\)
当p|n, \((\frac{n}{p})=0\)

结论: \((\frac{n}{p})=n^{\frac{p-1}{2}}\)

定理:定理:对于方程 \(x^2≡n\; mod \; p\) ,有 \(\frac{p-1}{2}\)​ 个不同的 n ,使得该方程有解。

所以在[0,p-1]中随机选一个数a,定义w=a^2-n,若 \((\frac{w}{p})=-1\), 那么 \((a+\sqrt{w})^{\frac{p+1}{2}}\) 就是一组二次剩余。

所以这个算法的期望复杂度只有2次。

假如n是p的二次剩余,那么n可以在模p意义下开根。

模板代码:

p是任意的奇质数。

const int p = 1e9 + 7;
struct hh {
    ll x, y;
    hh() {};
    hh(ll _x, ll _y) {
        x = _x;
        y = _y;
    }
};
ll w;
hh mul(hh a, hh b, ll p) {
    hh ans;
    ans.x = (a.x * b.x % p + a.y * b.y % p * w % p) % p;
    ans.y = (a.x * b.y % p + a.y * b.x % p) % p;
    return ans;
}
hh quick1(hh a, ll b, ll p) {
    hh ans = hh(1, 0);
    while(b) {
        if(b & 1)
            ans = mul(ans, a, p);
        a = mul(a, a, p);
        b >>= 1;
    }
    return ans;
}
ll quick2(ll a, ll b, ll p) {
    ll ans = 1;
    while(b) {
        if(b & 1)
            ans = (ans * a) % p;
        b >>= 1;
        a = (a * a) % p;
    }
    return ans;
}
ll solve(ll a, ll p) { //求解 x^2=a(mod p) 的x的值
    a %= p; //注意这句话
    if(a == 0)
        return 0;//注意这句话
    if(p == 2)
        return a;
    if(quick2(a, (p - 1) / 2, p) == p - 1)
        return -1;
    ll b, t;
    while(1) {
        b = rand() % p;
        t = b * b - a;
        w = (t % p + p) % p;
        if(quick2(w, (p - 1) / 2, p) == p - 1)
            break;
    }
    hh ans = hh(b, 1);
    ans = quick1(ans, (p + 1) / 2, p);
    return ans.x;
}

原文链接:https://blog.csdn.net/kele52he/article/details/78897187
原文链接:https://blog.csdn.net/stevensonson/article/details/85845334

转载于:https://www.cnblogs.com/Yinku/p/11363960.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 致远OA是一款常用的企业办公自动化软件,支持二次开发功能。在致远OA中,发送表单的操作可以通过二次开发来实现。 首先,二次开发需要了解致远OA的基本原理和开发框架。致远OA采用B/S架构,前端使用HTML、CSS和JavaScript等技术,后端采用Java语言进行开发。开发过程主要包括业务逻辑编写、数据库设计与开发、接口开发等。 要实现发送表单功能,需要在致远OA中添加相应的表单模板和发送功能。通过二次开发,可以自定义表单页面和相关逻辑,实现表单的填写、提交和发送。 具体操作步骤如下: 1. 首先,根据实际需求,在致远OA系统中创建表单模板。表单模板可以使用致远OA提供的表单设计器进行设计,也可以使用其他工具进行设计,并将设计好的表单模板导入到致远OA系统中。 2. 在二次开发中编写表单页面的前端代码。可以使用HTML、CSS和JavaScript等技术,根据需求设计表单的样式和布局。同时,需要编写与表单相关的JavaScript代码,处理表单的验证、提交等操作。 3. 在致远OA系统中创建表单对应的数据表,用于存储表单数据。可以使用数据库管理工具创建数据表,并将数据表与致远OA系统进行关联。 4. 在二次开发中编写表单页面的后端代码。可以使用Java语言编写,通过编写相关的接口,实现表单数据的查询、保存和发送等功能。在后端代码中,需要与致远OA系统进行数据交互,可以通过调用致远OA提供的API来实现。 5. 最后,在致远OA系统中添加表单发送按钮,并将其与相应的功能进行关联。在二次开发中,可以通过编写按钮的点击事件,调用相应的接口,实现发送表单的功能。 通过以上步骤,就可以实现致远OA二次开发发送表单的功能。在具体操作过程中,还需要根据实际需求进行相应的调整和修改。 ### 回答2: 致远OA是一款企业办公自动化软件,提供标准流程和表单模板。为了满足特定的业务需求,致远OA支持二次开发,并且可以通过二次开发来实现发送表单功能。 在进行二次开发之前,首先需要明确发送表单的具体需求。例如,是需要在特定条件下自动发送表单给指定用户,还是由用户手动触发发送表单等。然后,根据需求,通过OA的二次开发平台进行相应的代码编写。 一般来说,开发发送表单的逻辑包括以下几个步骤: 1. 获取表单数据:根据业务需求,通过OA提供的接口或数据库查询获取需要发送的表单数据。 2. 生成邮件内容:将表单数据转化为邮件内容,并设置邮件的标题、正文等信息。可以使用OA提供的邮件发送接口或者其他第三方邮件服务进行发送。 3. 设置接收人:确定接收表单的用户,可以根据部门、角色、特定人员等进行指定。在生成邮件时,需要将接收人信息设置为收件人地址。 4. 触发发送:根据业务逻辑,确定发送表单的触发条件,如特定事件发生、用户手动触发等。当满足触发条件时,调用发送表单的代码,将表单发送给指定的接收人。 在二次开发过程中,需要根据具体需求编写相关的代码,并测试其正确性和稳定性。同时,也需要注意系统的安全性和稳定性,避免可能的漏洞和错误。另外,开发完成后,还需进行相应的文档记录和发布流程,便于系统的维护和扩展。 通过以上步骤的二次开发,致远OA可以实现发送表单的功能,方便用户根据自身需求进行业务流程的管理和表单的定制化发送。 ### 回答3: 致远OA是一款功能强大的办公自动化系统,可以帮助企业实现业务流程的自动化管理。在进行OA二次开发时,我们可以通过发送表单来实现数据的提交和流转。 首先,我们需要在OA系统中进行表单的设计和配置。可以根据企业的实际需求,自定义各种表单模板,包括请假、报销、采购等各种业务表单。通过系统管理员或开发人员的操作,将设计好的表单模板添加到系统中。 接下来,当用户需要提交表单时,可以通过OA系统提供的接口或者自定义的界面进行表单的填写和提交。用户可以根据表单中的要求填写相应的信息,例如请假的时间、原因等。填写完成后,点击提交按钮,表单的数据将会被发送到后台进行处理。 在二次开发中,我们可以对表单的提交进行自定义的逻辑处理。例如,对于请假申请,系统可以根据用户提交的请假时间和原因,自动计算出剩余的可用假期天数,并进行相应的提醒和审批流程。这样可以提高企业的工作效率和管理水平。 除了发送表单,在OA系统的二次开发中还可以实现其他功能,例如自动化的邮件通知、数据自动同步等。这些功能都可以根据企业的实际需求进行定制开发,以提高工作效率和管理水平。 综上所述,致远OA二次开发中发送表单是一项重要的功能。通过表单的设计、填写和提交,可以实现数据的流转和处理,提高企业的工作效率和管理水平。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值