初等数论小题目

\[n^2-3n-1\equiv 0\pmod {p^2}
\]

配方,得到:

\[(2n-3)^2\equiv 13 \pmod {p^2}
\]

根据亨泽尔引理,只需得到 \((2n-3)^2\equiv 13 \pmod {p}\) 的解即可提升到 \(p^2\)。这是二次剩余,直接解。

单次求解 \(O(\log n)\),时间复杂度 \(O(n)\)。

#include<bits/stdc++.h>
using namespace std;
#define int long long
namespace Cp{
int mod,I;
struct comp{
int x,y;
comp(int a=0,int b=0){
x=a,y=b;
}
};
bool operator ==(comp a,comp b){
return a.x==b.x&&a.y==b.y;
}
comp operator *(comp a,comp b){
return comp((a.x*b.x+I*a.y%mod*b.y)%mod,(a.x*b.y+a.y*b.x)%mod);
}
comp qp(comp a,int b){
if(b==0)return comp(1);
comp T=qp(a,b>>1);T=T*T;
if(b&1)return T*a;
return T;
}
bool ck(int x){
return qp(x,(mod-1)/2)==comp(1,0);
}
mt19937 rng(time(0));
void solve(int n,int p,int &x1,int &x2){
int a=rng()%mod;
while(!a||ck((a*a+mod-n)%mod))a=rng()%mod;
I=(a*a+mod-n)%mod;
x1=(qp(comp(a,1),(mod+1)>>1).x)%mod;
x2=mod-x1;
}
pair<int,int> solve(int N,int P){
mod=P;
if(!ck(N))return {-1,-1};
int x1,x2;solve(N,P,x1,x2);
return {x1,x2};
}
}
int baoli(int p){
int mod=p*p;
for(int i=0;i<p*p;i++)if((i*i-3*i+3*mod)%mod==1)return i;
return 0;
}
int qp(int a,int b,int p){
if(b==0)return 1;
int T=qp(a,b>>1,p);T=T*T%p;
if(b&1)return T*a%p;
return T;
}
int hez(int x,int p){
int M=p*p;
if((8*x-12%p+p)%p!=0){
int t=-qp((8*x-12%p+p)%p,p-2,p)*(((4*x*x-12*x-4))/p)%p;
t=(t%p+p)%p;
return t*p+x;
}else if((4*x*x%M-12*x%M+9+M)%M==13)return x;
return p*p;
}
int calc(int p){
if(p==2)return 0;
auto [a,b]=Cp::solve(13,p);
if(a==-1)return 0;
int I2=qp(2,p-2,p);a=(a+3)*I2%p,b=(b+3)*I2%p;
int res=min(hez(a,p),hez(b,p));
if(res>=p*p)return 0;
return res;
}
const int maxn=1e7+5;
bool isp[maxn];
vector<signed> pr;int ans=0;
signed n;
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
cin>>n;
for(int i=2;i<=n;i++){
if(!isp[i])ans+=calc(i),pr.push_back(i);
for(auto u:pr){
if(i*u>n)break;
isp[i*u]=1;
if(i%u==0)break;
}
}
cout<<ans<<endl; return 0;
}

Project Euler 457 题解的更多相关文章

  1. project euler 169

    project euler 169 题目链接:https://projecteuler.net/problem=169 参考题解:http://tieba.baidu.com/p/2738022069 ...

  2. Python练习题 040:Project Euler 012:有超过500个因子的三角形数

    本题来自 Project Euler 第12题:https://projecteuler.net/problem=12 # Project Euler: Problem 12: Highly divi ...

  3. [project euler] program 4

    上一次接触 project euler 还是2011年的事情,做了前三道题,后来被第四题卡住了,前面几题的代码也没有保留下来. 今天试着暴力破解了一下,代码如下: (我大概是第 172,719 个解出 ...

  4. Python练习题 029:Project Euler 001:3和5的倍数

    开始做 Project Euler 的练习题.网站上总共有565题,真是个大题库啊! # Project Euler, Problem 1: Multiples of 3 and 5 # If we ...

  5. Project Euler 9

    题意:三个正整数a + b + c = 1000,a*a + b*b = c*c.求a*b*c. 解法:可以暴力枚举,但是也有数学方法. 首先,a,b,c中肯定有至少一个为偶数,否则和不可能为以上两个 ...

  6. Project Euler 44: Find the smallest pair of pentagonal numbers whose sum and difference is pentagonal.

    In Problem 42 we dealt with triangular problems, in Problem 44 of Project Euler we deal with pentago ...

  7. 【Project Euler 8】Largest product in a series

    题目要求是: The four adjacent digits in the 1000-digit number that have the greatest product are 9 × 9 × ...

  8. Project Euler 第一题效率分析

    Project Euler: 欧拉计划是一系列挑战数学或者计算机编程问题,解决这些问题需要的不仅仅是数学功底. 启动这一项目的目的在于,为乐于探索的人提供一个钻研其他领域并且学习新知识的平台,将这一平 ...

  9. Python练习题 049:Project Euler 022:姓名分值

    本题来自 Project Euler 第22题:https://projecteuler.net/problem=22 ''' Project Euler: Problem 22: Names sco ...

  10. Python练习题 048:Project Euler 021:10000以内所有亲和数之和

    本题来自 Project Euler 第21题:https://projecteuler.net/problem=21 ''' Project Euler: Problem 21: Amicable ...

随机推荐

  1. Redis可视化管理工具之Redislive

    RedisLive是一款用Python编写基于WEB的Redis图形监控工具,也是一款实时监控Redis数据的开源软件,以WEB的形式展现出redis中的key的情况,实例数据等信息. RedisLi ...

  2. c# 添加系统右键菜单(Windows11以前)

    今天介绍一下在注册表中添加系统右键菜单实现在文件夹的右键菜单中添加,删除以及查找是否已经添加的方法. 注意这里的方法仅限于Windows11之前使用,Windows11默认的右键菜单已经改变,需要使用 ...

  3. fastapi 实现HTTP访问

    1.概述 在使用python 时,我如何发布一个接口给外部访问, python 有 FASTAPI 和 uvicorn 实现,fastapi 是定义 api接口,uvicorn 运行服务器. 2.安装 ...

  4. 全网最详细的Spring入门教程

    为什么用Spring 什么是Spring Spring 是一款开源的轻量级 Java 开发框架,旨在提高开发人员的开发效率以及系统的可维护性. Spring的一个最大的目的就是使JAVA EE开发更加 ...

  5. js修改表单值不会触发input事件

    前情 最近在做需求开发时候,需要监听表单的input事件 坑位 当通过JS动态修改表单的值的发现并不会触发表单的input事件 Why? 个人猜测是浏览器默认行为,input只会针对用户手动输入做响应 ...

  6. docker-compose固定网段设置

    docker-compose在使用的时候,经常是多个docker组了个内网.而如果不指定内网地址的话,很容易和线下的网段冲突,会造成虽说外部IP和端口都映射好了,但是就是公网无法访问的情况. 解决方案 ...

  7. 【Python】【爬虫】爬取小说5000章,遇到的爬虫问题与解决思路

    爬虫问题分析 回顾 之前写了一个爬取小说网站的多线程爬虫,操作流程如下: 先爬取小说介绍页,获取所有章节信息(章节名称,章节对应阅读链接),然后使用多线程的方式(pool = Pool(50)),通过 ...

  8. sudo kill -HUP 10146

    systemctl status docker   systemctl reload docker

  9. docker 1.13版本修改默认存储路径及添加私有registry

    1.服务器安装dockeryum install docker -y12.修改配置文件方法1: 编辑 `/etc/sysconfig/docker`文件 修改`OPTION`选项 添加 --insec ...

  10. Windows交叉编译MNN-3.0.0安卓版本库

    一.写在前面 以下的步骤.流程都是基于MNN的文档,再结合自己的实践得出的,仅作为参考. 博主的环境是windows10专业版 MNN文档 MNN的Github仓库地址 二.下载MNN-3.0.0主库 ...