【模拟赛】【数论】2021.8.12.D

2024-01-30 07:32
文章标签 模拟 数论 2021.8

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

目录

  • 题目描述
  • 思路
  • 代码

题目描述

给出n,求所有x,使得x小于n,且 x 2 % n = 1 x ^ 2\ \%\ n\ =\ 1 x2 % n = 1
将所有x从小到大输出

思路

x 2 % n = 1 x ^ 2\ \%\ n\ =\ 1 x2 % n = 1
( x 2 − 1 ) % n = 0 (x^2\ -\ 1)\ \%\ n\ =\ 0 (x2  1) % n = 0
x 2 − 1 = k n x^2\ -\ 1 = kn x2  1=kn
( x − 1 ) ( x + 1 ) = k n (x\ -\ 1)(x\ +\ 1)\ =\ kn (x  1)(x + 1) = kn
然后设
( x + 1 ) = k 1 ∗ n 1 (x\ +\ 1)\ =\ k_1 * n_1 (x + 1) = k1n1
( x − 1 ) = k 2 ∗ n 2 (x\ -\ 1)\ =\ k_2 * n_2 (x  1) = k2n2
k 1 ∗ k 2 = k k_1 * k_2 = k k1k2=k
n 1 ∗ n 2 = n n_1 * n_2 = n n1n2=n
我们枚举 n 1 n_1 n1并记为 a a a
那么
n 2 = n / a n_2\ =\ n\ /\ a n2 = n / a
( x + 1 ) = k 1 ∗ a (x\ +\ 1)\ =\ k_1\ *\ a (x + 1) = k1  a
我们再枚举 k 1 k_1 k1,记作 b b b
( x + 1 ) = a ∗ b (x\ +\ 1)\ =\ a\ *\ b (x + 1) = a  b
x = a ∗ b − 1 x\ =\ a\ *\ b\ -\ 1 x = a  b  1
将此式代入 ( x − 1 ) = k 2 ∗ n 2 (x\ -\ 1)\ =\ k_2 * n_2 (x  1) = k2n2
( a ∗ b − 1 ) = k 2 ∗ ( n / a ) (a\ *\ b\ -\ 1)\ =\ k_2\ *\ (n\ /\ a) (a  b  1) = k2  (n / a)
( a ∗ b − 2 ) (a\ *\ b\ -\ 2) (a  b  2) ( n / a ) (n\ /\ a) (n / a)的倍数
x = a ∗ b − 1 x\ =\ a\ *\ b\ -\ 1 x = a  b  1为一组解
其余参考大爷博客

代码

#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#define ll long long
using namespace std;ll Ans[5000250];
ll n, m, t;void init(ll n1)
{for(ll k1 = 0; k1 <= n / n1; ++k1){m = n1 * k1 - 2;//处理(x-1)和(x+1)if(m % (n / n1) == 0)Ans[++t] = n1 * k1 - 1;m = n1 * k1 + 2;if(m % (n / n1) == 0)Ans[++t] = n1 * k1 + 1;}
}int main()
{scanf("%lld", &n);if(n == 1){printf("None\n"); return 0;}for(int i = 1; i <= (ll)sqrt(n); ++i)if(!(n % i))init(n / i);sort(Ans + 1, Ans + t + 1);t = 0;while(Ans[++t] <= 0);t--;while(Ans[++t] && Ans[t] <= n)if(Ans[t] != Ans[t - 1])printf("%lld\n", Ans[t]);return 0;}

这篇关于【模拟赛】【数论】2021.8.12.D的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Python模拟串口通信的示例详解

《Python模拟串口通信的示例详解》pySerial是Python中用于操作串口的第三方模块,它支持Windows、Linux、OSX、BSD等多个平台,下面我们就来看看Python如何使用pySe... 目录1.win 下载虚www.chinasem.cn拟串口2、确定串口号3、配置串口4、串口通信示例5

CSS模拟 html 的 title 属性(鼠标悬浮显示提示文字效果)

《CSS模拟html的title属性(鼠标悬浮显示提示文字效果)》:本文主要介绍了如何使用CSS模拟HTML的title属性,通过鼠标悬浮显示提示文字效果,通过设置`.tipBox`和`.tipBox.tipContent`的样式,实现了提示内容的隐藏和显示,详细内容请阅读本文,希望能对你有所帮助... 效

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

usaco 1.2 Transformations(模拟)

我的做法就是一个一个情况枚举出来 注意计算公式: ( 变换后的矩阵记为C) 顺时针旋转90°:C[i] [j]=A[n-j-1] [i] (旋转180°和270° 可以多转几个九十度来推) 对称:C[i] [n-j-1]=A[i] [j] 代码有点长 。。。 /*ID: who jayLANG: C++TASK: transform*/#include<

数论入门整理(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;} 例题:

数论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

hdu4431麻将模拟

给13张牌。问增加哪些牌可以胡牌。 胡牌有以下几种情况: 1、一个对子 + 4组 3个相同的牌或者顺子。 2、7个不同的对子。 3、13幺 贪心的思想: 对于某张牌>=3个,先减去3个相同,再组合顺子。 import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.IOExcepti

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

【每日一题】LeetCode 2181.合并零之间的节点(链表、模拟)

【每日一题】LeetCode 2181.合并零之间的节点(链表、模拟) 题目描述 给定一个链表,链表中的每个节点代表一个整数。链表中的整数由 0 分隔开,表示不同的区间。链表的开始和结束节点的值都为 0。任务是将每两个相邻的 0 之间的所有节点合并成一个节点,新节点的值为原区间内所有节点值的和。合并后,需要移除所有的 0,并返回修改后的链表头节点。 思路分析 初始化:创建一个虚拟头节点

每日一题|牛客竞赛|四舍五入|字符串+贪心+模拟

每日一题|四舍五入 四舍五入 心有猛虎,细嗅蔷薇。你好朋友,这里是锅巴的C\C++学习笔记,常言道,不积跬步无以至千里,希望有朝一日我们积累的滴水可以击穿顽石。 四舍五入 题目: 牛牛发明了一种新的四舍五入应用于整数,对个位四舍五入,规则如下 12345->12350 12399->12400 输入描述: 输入一个整数n(0<=n<=109 ) 输出描述: 输出一个整数