牛客网:S老师的公式 ← 取模运算

2024-04-27 22:04

本文主要是介绍牛客网:S老师的公式 ← 取模运算,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

【题目来源】
https://ac.nowcoder.com/acm/contest/76652/A

【题目描述】
S 老师丢给你了一个简单的数学问题:
gcd(\sum_{i=1}^{n}i,\prod_{i=1}^{n}i)
请你求出答案。

【输入格式】
一行一个整数 n (1≤n≤10^6)。

【输出格式】
一行一个整数表示答案。

【说明】
例如,若n=3,则本题求解 gcd(1+2+3,1*2*3)=gcd(6,6)=6

【算法分析】

● 辗转相除法求最大公约数:https://blog.csdn.net/hnjzsyjyj/article/details/136276606

#include <bits/stdc++.h>
using namespace std;int gcd(int a,int b) {if(b==0) return a;else return gcd(b,a%b);
}int main() {int n;cin>>n;while(n--) {int a,b;cin>>a>>b;cout<<gcd(a,b)<<endl;}return 0;
}/*
in:
2
3 6
4 6
out:
3
2
*/

● 取模运算规则:https://blog.csdn.net/hnjzsyjyj/article/details/120275467
因为本题数据规模高达10^6,所以对其求阶乘是无法想象的。需进行取模优化。
可以证明,
gcd(a,b)=gcd(a,b%a),所以就有了本例中的代码 for(int i=1; i<=n; i++) y=y*i%x;
● 若整数超过10位,就选择用 long long 型。所以,本题切记使用 long long 型。
https://blog.csdn.net/hnjzsyjyj/article/details/132240042

【算法代码】

#include <bits/stdc++.h>
using namespace std;typedef long long LL;LL gcd(LL a,LL b) {if(b==0) return a;else return gcd(b,a%b);
}LL n;
int main() {cin>>n;LL x=n*(n+1)/2;LL y=1;for(int i=1; i<=n; i++) y=y*i%x;cout<<gcd(x,y)<<endl; //__gcd(x,y)return 0;
}/*
in:5
out:15
*/




【参考文献】
https://blog.csdn.net/hnjzsyjyj/article/details/132240042
https://www.nowcoder.com/discuss/598465728497410048
https://blog.csdn.net/2303_76151267/article/details/136766539
https://blog.nowcoder.net/n/dce4118dc19b44b7972d37f376091c42





 

这篇关于牛客网:S老师的公式 ← 取模运算的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

uva 575 Skew Binary(位运算)

求第一个以(2^(k+1)-1)为进制的数。 数据不大,可以直接搞。 代码: #include <stdio.h>#include <string.h>const int maxn = 100 + 5;int main(){char num[maxn];while (scanf("%s", num) == 1){if (num[0] == '0')break;int len =

hdu 4565 推倒公式+矩阵快速幂

题意 求下式的值: Sn=⌈ (a+b√)n⌉%m S_n = \lceil\ (a + \sqrt{b}) ^ n \rceil\% m 其中: 0<a,m<215 0< a, m < 2^{15} 0<b,n<231 0 < b, n < 2^{31} (a−1)2<b<a2 (a-1)^2< b < a^2 解析 令: An=(a+b√)n A_n = (a +

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

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

【Java中的位运算和逻辑运算详解及其区别】

Java中的位运算和逻辑运算详解及其区别 在 Java 编程中,位运算和逻辑运算是常见的两种操作类型。位运算用于操作整数的二进制位,而逻辑运算则是处理布尔值 (boolean) 的运算。本文将详细讲解这两种运算及其主要区别,并给出相应示例。 应用场景了解 位运算和逻辑运算的设计初衷源自计算机底层硬件和逻辑运算的需求,它们分别针对不同的处理对象和场景。以下是它们设计的初始目的简介:

位运算:带带孩子吧,孩子很强的!

快速进制 在聊到位运算之前,不妨先简单过一遍二进制的东西。熟悉二进制和十进制的快速转换确实是掌握位运算的基础,因为位运算直接在二进制位上进行操作。如果不熟悉二进制表示,很难直观理解位运算的效果。 这里主要涉及二进制和十进制之间的互相转换。 十进制转二进制 十进制转二进制可以使用常见的 除2取余法 进行。每次将十进制除以2并记录所得余数,直到商为0,然后再将记录的余数 从下往上排列即

二维旋转公式

二维旋转公式 ros的tf工具包可以很方便的实现任意坐标系之间的坐标转换。但是,如果只是想简单的测试想法,而又不想编写过于庞杂的代码,考虑自己写二维旋转的函数。而与二维旋转问题对偶的另一个问题便是二维坐标系旋转变换。这两个问题的形式基本一样,只是旋转的角度相差一个负号。就是这个容易搞混,所以做个笔记,以备查用。 1. 二维旋转公式(算法) 而(此文只针对二维)旋转则是表示某一坐标点 ( x

word转PDF后mathtype公式乱码以及图片分辨率降低等一系列问题|完美解决

word转PDF后mathtype公式乱码以及图片分辨率降低等一系列问题|完美解决 问题描述 最近在投一篇期刊论文,直接提交word文档,当时没有查看提交预览,一审审稿意见全是:公式乱码、公式乱码、乱码啊!!!是我大意了,第二次提交,我就决定将word文档转成PDF后再提交,避免再次出现公式乱码的问题。接着问题又来了,我利用‘文件/导出’或‘文件/另存为’的方式将word转成PDF后,发现公式

牛客小白月赛100部分题解

比赛地址:牛客小白月赛100_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ A.ACM中的A题 #include<bits/stdc++.h>using namespace std;#define ll long long#define ull = unsigned long longvoid solve() {ll a,b,c;cin>>a>>b>

牛客小白月赛100(A,B,C,D,E,F三元环计数)

比赛链接 官方讲解 这场比较简单,ABC都很签到,D是个不太裸需要预处理的 B F S BFS BFS 搜索,E是调和级数暴力枚举,F是三元环计数。三元环考的比较少,没见过可能会偏难。 A ACM中的A题 思路: 就是枚举每个边变成原来的两倍,然后看看两短边之和是否大于第三边即可。 不能只给最短边乘 2 2 2,比如 1 4 8 这组数据,也不能只给第二短边乘 2 2 2,比