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 ...
随机推荐
- Spring MVC 3.2 技术预览(三):动手写一个异步Controller方法
原文地址:http://blog.springsource.org/2012/05/10/spring-mvc-3-2-preview-making-a-controller-method-async ...
- java——棋牌类游戏五子棋(webwzq1.0)之一(基础)
这是本人最近一段时间写的斗地主的java代码,大体框架都实现了,一些细节还需要后续优化. package basegame; import java.awt.Button; import java.a ...
- 最全ECharts 实战大全(速记版+资源)
hello,大家好,我是程序员海军,公众号已经快一年多没更新了,没更新的这段时间,我去哪了呢.这两年经历了很多事情,主要情感上占据大部分时间, 从失恋 - 谈对象 - 再失恋. 言归正传,近期我负责的 ...
- idea springboot 微服务批量启动
概要 在使用IDEA开发微服务的时候,微服务比较多,启动起来比较麻烦,下面介绍一下使用批量启动微服务的方法. 方法 编辑当前项目根目录下的 .idea\workspace.xml 文件. 找到 < ...
- ZCMU-1053
比较简单记录一下主要感觉它这个题目没说清楚,题目要求:先有n,接着给出长度为n的标准组,然后给出猜测组,输出的两个数一个是有多少个是相对应的既相同坐标其数值也相同,后一个是两个都有但是位置不同(不含已 ...
- e00格式分析
Arc/Info Export (E00) Format Analysis Original Author: Unknown Last Update: 2000-02-24, Daniel Mori ...
- 【分块】LibreOJ 6279 数列分块入门3
题目 https://loj.ac/p/6279 题解 将 \(n\) 个元素的数组 \(a\) 按块长 \(\sqrt{n}\) 进行分块处理.为每个块设置一个懒添加标记 \(add[i]\),代表 ...
- 使用TOPIAM 轻松搞定「JumpServer」单点登录
本文将介绍 TOPIAM 与 JumpServer 集成步骤详细指南. 应用简介 JumpServer 是广受欢迎的开源堡垒机,是符合 4A 规范的专业运维安全审计系统.JumpServer 帮助企业 ...
- 【Linux】当初的学习笔记
目录 Linux 笔记 linux基本概念 linux终端四部分 linux的实质 linux系统操作命令 查询用户 who who -H whoami 修改密码 快速切换到用户目录 sshd sys ...
- 【转载】Spring Cloud Gateway监控
http://www.imooc.com/article/290822 欢迎加入Spring Cloud Gateway监控豪华套餐-- 只要为Spring Cloud Gateway添加Spring ...