Project Euler 457 题解
初等数论小题目
求
\]
配方,得到:
\]
根据亨泽尔引理,只需得到 \((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 题解的更多相关文章
- project euler 169
project euler 169 题目链接:https://projecteuler.net/problem=169 参考题解:http://tieba.baidu.com/p/2738022069 ...
- Python练习题 040:Project Euler 012:有超过500个因子的三角形数
本题来自 Project Euler 第12题:https://projecteuler.net/problem=12 # Project Euler: Problem 12: Highly divi ...
- [project euler] program 4
上一次接触 project euler 还是2011年的事情,做了前三道题,后来被第四题卡住了,前面几题的代码也没有保留下来. 今天试着暴力破解了一下,代码如下: (我大概是第 172,719 个解出 ...
- Python练习题 029:Project Euler 001:3和5的倍数
开始做 Project Euler 的练习题.网站上总共有565题,真是个大题库啊! # Project Euler, Problem 1: Multiples of 3 and 5 # If we ...
- Project Euler 9
题意:三个正整数a + b + c = 1000,a*a + b*b = c*c.求a*b*c. 解法:可以暴力枚举,但是也有数学方法. 首先,a,b,c中肯定有至少一个为偶数,否则和不可能为以上两个 ...
- 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 ...
- 【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 × ...
- Project Euler 第一题效率分析
Project Euler: 欧拉计划是一系列挑战数学或者计算机编程问题,解决这些问题需要的不仅仅是数学功底. 启动这一项目的目的在于,为乐于探索的人提供一个钻研其他领域并且学习新知识的平台,将这一平 ...
- Python练习题 049:Project Euler 022:姓名分值
本题来自 Project Euler 第22题:https://projecteuler.net/problem=22 ''' Project Euler: Problem 22: Names sco ...
- Python练习题 048:Project Euler 021:10000以内所有亲和数之和
本题来自 Project Euler 第21题:https://projecteuler.net/problem=21 ''' Project Euler: Problem 21: Amicable ...
随机推荐
- JVM的垃圾回收与内存分配
Java是一种内存动态分配和垃圾回收技术的一种语言,不需要显示的进行对象内存的分配,这一切操作都是由JVM来完成的,由于Java是"一切皆对象"的,所以对于内存分配的优化与速度非常 ...
- 可爱的 Python: 创建声明性迷你语言
编程为断言而不是指令 Python 的面向对象和透明自省功能使您可以轻松地创建用于编程任务的声明性迷你语言.在本专栏文章中,David 并未仔细研究如何使用 Python 来解释或翻译其它的专门语言( ...
- manim边做边学--圆柱体
Cylinder是Manim中用于创建圆柱体对象的类. Cylinder类在制作数学.物理或工程领域的动画时,可用于以下的场景中: 演示几何概念:使用Cylinder类创建圆柱体,并通过改变其参数和方 ...
- .NET 使用 ZXing.Net 生成二维码,并识别
.NET 使用 ZXing.Net 生成二维码,并识别 前言 前面已经分享给很多创建二维码,条形码...等一系列的方式 各有优缺点,暂时不做评价.今天推荐ZXing.Net .也是比较全面的一种方式, ...
- 服务迁移之《mysql数据同步问题》
我们大概是从2022年十月份开始进行拆分的.面对一百多个服务的时候,真的是无从下手,然后公司突然空降了一个从阿里出来的架构师,然后就带着我们大刀阔斧的整体迁移. 先是服务器购买阿里云的,然后从几个核心 ...
- C++ Builder 开发64程序 使用AnsiString的ToInt和ToDouble会内存泄漏
AnsiString str="adsfaga"; try { int v=str.ToInt(); } catch(...) { } 上面的代码,在C++ Builder 10 ...
- 渗透测试-前端加密之AES加密下的SQL注入
本文是高级前端加解密与验签实战的第4篇文章,本系列文章实验靶场为Yakit里自带的Vulinbox靶场,本文讲述的是绕过前端AES加密进行SQL注入. CryptoJS.AES-被前端加密的SQL注入 ...
- Linux系统手动安装Firefox浏览器
大多数Linux发行版都以Firefox作为默认的浏览器,并可以轻松地从软件库中安装.例如:Debian/Ubuntu: sudo apt-get install firefoxFedora: sud ...
- Qt音视频开发17-海康sdk解码
一.前言 在视频监控行业领域,海康当之无愧是老大,稳坐第一的宝座很多年了,近期需要将视频监控系统改成采用海康sdk的内核,于是特意去查阅了sdk的使用手册,sdk相关的文档和文件可以直接官网下载到,而 ...
- [转]OpenLayer4地图全屏的实现
第一种方式:自实现 1.首先将地图容器的长宽设置成100%. 2.对form 和body标签长宽设置成100%. 3.对浏览器进行全屏设置. 具体代码如下所示(fullextent 为全屏安全ID.) ...