nyoj1047欧几里得
欧几里得
- 描述
-
已知gcd(a,b)表示a,b的最大公约数。
现在给你一个整数n,你的任务是在区间[1,n)里面找到一个最大的x,使得gcd(x,n)等于1。
- 输入
-
输入文件的第一行是一个正整数T,表示有T组测试数据
接下来有T行,每行有一个正整数n (1<=n<=10^1000)。 - 输出
- 每组测试输出要求x。
- 样例输入
-
2 4 7
- 样例输出
-
3 6
-
题目大意: 在1--n中找一个最大的数x,让x与n的最大公约数为1
-
思路: 很明显n-1就是需要找的x,比如:n=10,x就是9;n=45,x=44;.....
-
看到这也许你想动手开始写程序了(又或者和我思路一样,代码已经码好,可是WrongAnswer),别急,往下看。
-
注意:数据范围 (1<=n<=10^1000),这个1要特别注意,如果按x=n-1,那此时x=0,明显错了,所以1为特殊数据,n=1时,答案应该是1;
-
10^1000, 足足1000位数,容易想到用字符串存,然后就是-1,输出,就行了。
-
再给几组测试数据:
-
3
-
1
-
1000000000000000000000000
-
1234567890
-
输出
-
1
-
999999999999999999999999
-
1234567889
-
AC代码:
-
#include <stdio.h> #include <string.h> int main() {int t, i, l;char s[2000];scanf("%d", &t);while(t--) {scanf("%s", s);l = strlen(s);if(l == 1 && s[0] == '1') printf("1\n");else {for(i = l-1; i >= 0; i--) {if(s[i] == '0') s[i] = '9';else {s[i] -= 1;break;}}i = 0;while(s[i] == '0') i++;for(i; i < l; i++) printf("%c",s[i]);printf("\n");}}return 0; }
nyoj1047欧几里得相关推荐
- Codeforces Gym100812 L. Knights without Fear and Reproach-扩展欧几里得(exgcd)
补一篇以前的扩展欧几里得的题,发现以前写错了竟然也过了,可能数据水??? 这个题还是很有意思的,和队友吵了两天,一边吵一边发现问题??? L. Knights without Fear and Rep ...
- 欧拉、欧几里得、笛卡尔都没能解决的数学问题,他探索了新的方案
萧箫 发自 凹非寺 量子位 报道 | 公众号 QbitAI 欧拉.欧几里得.笛卡尔.尼科马修斯都没能解决的千年数学问题,还有破解的可能吗? 还真有可能. 最近,一位名为佩斯·尼尔森 (Pace Nie ...
- acm数论之欧几里得gcd
1.欧几里得定理 同余定理的公式:(a+b)%mod=(a%mod+b%mod)%mod (a*b)%mod=(a%mod*b%mod)%mod 扩展欧几里得也有自己的一个公式:a*x+b*y=gcd ...
- java 双调旅行商 hamiltonian,双调欧几里得旅行商问题(TSP)
最小环+欧拉回路=最短哈密顿图 介绍 TSP(Traveling Salesman Problem)即旅行商问题,是数学领域中著名问题之一.这个问题是这样的:假设有一个旅行商人要拜访n个城市,他必须选 ...
- 扩展欧几里得 POJ 1061
感觉这道题目的数据好水啊...我的代码我都觉得姿势特别奇怪...竟然还过了... 好吧,原来不是姿势奇怪,而是逆元需要用的时候是余数也需要的时候,这里的余数是不需要的,所以就AC了 就说一下碰到的问题 ...
- 最大整数扩展欧几里得
时间紧张,先记一笔,后续优化与完善. 辗转相除法求最大公约数,相信大家都在高中学过了,它也叫做欧几里得算法. 那么扩展欧几里得算法呢?它也能求出两个数的最大公约数,不过这不是他的目的,他用来解一个线性 ...
- Java实现算法导论中求解模线性方程解(基于最大公约数欧几里得扩展算法)
基于最大公约数欧几里得扩展算法求解算法导论中模线性方程解.具体要结合算法导论中的有关数论算法章节理解,具体代码如下: package cn.ansj;/*假设方程ax=b(mod n)有解,且x0是方 ...
- 求逆元(线性求逆元)及其扩展欧几里得
线性求逆元模板: int inv[maxn]; void initInverse(){inv[1] = 1;for(int i = 2; i <= maxn; i++)inv[i] = (p - ...
- 欧几里得及扩展欧几里得算法
欧几里得算法 这个就是常说的辗转相除法,用于计算两个整数 $a,b$ 的最大公约数,即$$gcd(a,b)=gcd(b,a\;mod\;b)$$ int gcd(int a,int b){return ...
最新文章
- 没有熙熙攘攘,百度VR在世界大会的一场奇妙之旅
- 多线程环境中安全使用集合API(含代码)
- 忘记手机绑定过的UC/交易猫账号怎么找回
- 在Web中如何运用JavaScript实现打印功能
- Hadoop, Hbase
- 【SLAM】安装 g2o_viewer
- 根可达算法的根_我的JVM(六):GC的基础概念以及GC算法
- (计算机组成原理)第七章输入和输出系统-第四节3:I/O方式之DMA方式
- Netty是如何解决粘包和拆包问题的
- 随想录(英语学习的几个误区)
- android 广告close,小程序广告弹出与关闭
- 【图像去噪】基于matlab GUI均值+中值+空间+高斯滤波图像去噪【含Matlab源码 763期】
- 电子产品硬件开发流程
- 搭建ftp服务器的超详细步骤。
- MarkDown思维导图
- 计算机软件专业硕士论文,软件工程硕士论文范文
- 计算机网络课程设计组建大型网吧局域网,计算机网络课程设计报告—组建大型网吧局域网.doc...
- 深入理解C# Unity List集合去除重复项 Distinct
- Spring的AOP(一):什么是AOP
- SVN的分支是做什么的?
热门文章
- 一篇讲清:数据采集中的安全与隐私
- 手把手教你webpack3(3)入口(多入口)entry
- statCVS的问题剖析
- Modbus网口设备接入多比物联网云平台教程
- Triangular Sums http://acm.nyist.net/JudgeOnline/problem.php?pid=122
- get方式乱码及MAC异常
- Cisco路由器交换机安全配置
- how to add one row in the dataframe?
- questions for the exploitation of technologies
- Hd2087 剪花布条