【JZOJ3188】找数【数论,数学】

2024-01-30 10:18
文章标签 数学 数论 找数 jzoj3188

本文主要是介绍【JZOJ3188】找数【数论,数学】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目大意:

题目链接:https://jzoj.net/senior/#main/show/3188
找出第 N N N个最小素因子是 P P P的正整数。


思路:

sto XXY orz \color{red}\texttt{sto\ XXY\ orz} sto XXY orz

sto XXY orz \color{blue}\texttt{sto\ XXY\ orz} sto XXY orz

sto XXY orz \color{green}\texttt{sto\ XXY\ orz} sto XXY orz

sto XXY orz(再加一遍XD) \color{white}\texttt{sto\ XXY\ orz(再加一遍XD)} sto XXY orz(再加一遍XD

重要的事情说三遍。


这道题 n ≤ 1 0 9 n\leq 10^9 n109
XXY d a l a o dalao dalao给出了 1 10 \frac{1}{10} 101常数的暴力。
然后就过了。
首先特判 n = 1 n=1 n=1,显然输出1。
然后特判 n > 1 n>1 n>1 p 2 > 1 0 9 p^2>10^9 p2>109,显然输出0。
接下来依次特判 p = 2 , p = 3 , p = 5 , p = 7 , p = 11 p=2,p=3,p=5,p=7,p=11 p=2,p=3,p=5,p=7,p=11。最坏情况下 p = 5 p=5 p=5 1 0 9 2 p \frac{10^9}{2p} 2p109的复杂度。
然后剩下的就是 p > 11 p>11 p>11的了。枚举 p p p的倍数,判断是否成立。
时间复杂度 O ( 1 0 8 + O(10^8+ O(108+某些常数 ) ) )。鉴于JZOJ评测机很好, 416 m s 416ms 416ms跑过了。


代码:

#include <cstdio>
#define rr register
using namespace std;
typedef long long ll;const int MAXN=1e9;
const int Psum=35000;
int n,p,cnt,k,prime[Psum],v[Psum];
void find(int maxn)
{for (int i=2;i<=maxn;i++){if (!v[i]){v[i]=i;prime[++cnt]=i;}for (int j=1;j<=cnt;j++){if (prime[j]*i>maxn) break;if (prime[j]>v[i]) break;v[i*prime[j]]=prime[j];}}
}int check(int x)
{for (int i=1;i<k;i++)if (!(x%prime[i])) return 0;return 1;
}int main()
{scanf("%d%d",&n,&p);if (n==1){printf("%d",p);return 0;}if (n>1&&(ll)p*(ll)p>MAXN){printf("0");return 0;}if (p==2){if (n*p<=MAXN) printf("%d",n*p);else printf("0");return 0;}if (p==3){ll x=3+(ll)(n-1)*6;if (x<=MAXN) printf("%lld",x);else printf("0");return 0;}if (p==5){for (rr int i=p;i<=MAXN;i+=2*p)if (i%3){n--;if (!n){printf("%d",i);return 0;}}printf("0");return 0;}if (p==7){for (rr int i=p;i<=MAXN;i+=2*p)if (i%3&&i%5){n--;if (!n){printf("%d",i);return 0;}}printf("0");return 0;}if (p==11){for (rr int i=p;i<=MAXN;i+=2*p)if (i%3&&i%5&&i%7){n--;if (!n){printf("%d",i);return 0;}}printf("0");return 0;}find(Psum);for (k=1;k<=cnt;k++)if (prime[k]==p) break;for (rr int i=p;i<=MAXN;i+=2*p)if (check(i)){n--;if (!n){printf("%d",i);return 0;}}printf("0");return 0;
}

这篇关于【JZOJ3188】找数【数论,数学】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/659919

相关文章

uva 10014 Simple calculations(数学推导)

直接按照题意来推导最后的结果就行了。 开始的时候只做到了第一个推导,第二次没有继续下去。 代码: #include<stdio.h>int main(){int T, n, i;double a, aa, sum, temp, ans;scanf("%d", &T);while(T--){scanf("%d", &n);scanf("%lf", &first);scanf

uva 10025 The ? 1 ? 2 ? ... ? n = k problem(数学)

题意是    ?  1  ?  2  ?  ...  ?  n = k 式子中给k,? 处可以填 + 也可以填 - ,问最小满足条件的n。 e.g k = 12  - 1 + 2 + 3 + 4 + 5 + 6 - 7 = 12 with n = 7。 先给证明,令 S(n) = 1 + 2 + 3 + 4 + 5 + .... + n 暴搜n,搜出当 S(n) >=

uva 11044 Searching for Nessy(小学数学)

题意是给出一个n*m的格子,求出里面有多少个不重合的九宫格。 (rows / 3) * (columns / 3) K.o 代码: #include <stdio.h>int main(){int ncase;scanf("%d", &ncase);while (ncase--){int rows, columns;scanf("%d%d", &rows, &col

数论入门整理(updating)

一、gcd lcm 基础中的基础,一般用来处理计算第一步什么的,分数化简之类。 LL gcd(LL a, LL b) { return b ? gcd(b, a % b) : a; } <pre name="code" class="cpp">LL lcm(LL a, LL b){LL c = gcd(a, b);return a / c * b;} 例题:

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

数论ZOJ 2562

题意:给定一个数N,求小于等于N的所有数当中,约数最多的一个数,如果存在多个这样的数,输出其中最大的一个。 分析:反素数定义:对于任何正整数x,其约数的个数记做g(x).例如g(1)=1,g(6)=4.如果某个正整数x满足:对于任意i(0<i<x),都有g(i)<g(x),则称x为反素数。 性质一:一个反素数的质因子必然是从2开始连续的质数。 性质二:p=2^t1*3^t2*5^t3*7

POJ2247数论

p = 2^a*3^b*5^c*7^d 求形如上式的第n小的数。 import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;import java.io.PrintWriter;import java.math.BigInteger;import java.u

数学建模笔记—— 非线性规划

数学建模笔记—— 非线性规划 非线性规划1. 模型原理1.1 非线性规划的标准型1.2 非线性规划求解的Matlab函数 2. 典型例题3. matlab代码求解3.1 例1 一个简单示例3.2 例2 选址问题1. 第一问 线性规划2. 第二问 非线性规划 非线性规划 非线性规划是一种求解目标函数或约束条件中有一个或几个非线性函数的最优化问题的方法。运筹学的一个重要分支。2

CSP-J基础之数学基础 初等数论 一篇搞懂(一)

文章目录 前言声明初等数论是什么初等数论历史1. **古代时期**2. **中世纪时期**3. **文艺复兴与近代**4. **现代时期** 整数的整除性约数什么样的整数除什么样的整数才能得到整数?条件:举例说明:一般化: 判断两个数能否被整除 因数与倍数质数与复合数使用开根号法判定质数哥德巴赫猜想最大公因数与辗转相除法计算最大公因数的常用方法:举几个例子:例子 1: 计算 12 和 18

2024年AMC10美国数学竞赛倒计时两个月:吃透1250道真题和知识点(持续)

根据通知,2024年AMC10美国数学竞赛的报名还有两周,正式比赛还有两个月就要开始了。计划参赛的孩子们要记好时间,认真备考,最后冲刺再提高成绩。 那么如何备考2024年AMC10美国数学竞赛呢?做真题,吃透真题和背后的知识点是备考AMC8、AMC10有效的方法之一。通过做真题,可以帮助孩子找到真实竞赛的感觉,而且更加贴近比赛的内容,可以通过真题查漏补缺,更有针对性的补齐知识的短板。