欧几里得

时间限制:1000 ms  
描述

已知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欧几里得相关推荐

  1. Codeforces Gym100812 L. Knights without Fear and Reproach-扩展欧几里得(exgcd)

    补一篇以前的扩展欧几里得的题,发现以前写错了竟然也过了,可能数据水??? 这个题还是很有意思的,和队友吵了两天,一边吵一边发现问题??? L. Knights without Fear and Rep ...

  2. 欧拉、欧几里得、笛卡尔都没能解决的数学问题,他探索了新的方案

    萧箫 发自 凹非寺 量子位 报道 | 公众号 QbitAI 欧拉.欧几里得.笛卡尔.尼科马修斯都没能解决的千年数学问题,还有破解的可能吗? 还真有可能. 最近,一位名为佩斯·尼尔森 (Pace Nie ...

  3. acm数论之欧几里得gcd

    1.欧几里得定理 同余定理的公式:(a+b)%mod=(a%mod+b%mod)%mod (a*b)%mod=(a%mod*b%mod)%mod 扩展欧几里得也有自己的一个公式:a*x+b*y=gcd ...

  4. java 双调旅行商 hamiltonian,双调欧几里得旅行商问题(TSP)

    最小环+欧拉回路=最短哈密顿图 介绍 TSP(Traveling Salesman Problem)即旅行商问题,是数学领域中著名问题之一.这个问题是这样的:假设有一个旅行商人要拜访n个城市,他必须选 ...

  5. 扩展欧几里得 POJ 1061

    感觉这道题目的数据好水啊...我的代码我都觉得姿势特别奇怪...竟然还过了... 好吧,原来不是姿势奇怪,而是逆元需要用的时候是余数也需要的时候,这里的余数是不需要的,所以就AC了 就说一下碰到的问题 ...

  6. 最大整数扩展欧几里得

    时间紧张,先记一笔,后续优化与完善. 辗转相除法求最大公约数,相信大家都在高中学过了,它也叫做欧几里得算法. 那么扩展欧几里得算法呢?它也能求出两个数的最大公约数,不过这不是他的目的,他用来解一个线性 ...

  7. Java实现算法导论中求解模线性方程解(基于最大公约数欧几里得扩展算法)

    基于最大公约数欧几里得扩展算法求解算法导论中模线性方程解.具体要结合算法导论中的有关数论算法章节理解,具体代码如下: package cn.ansj;/*假设方程ax=b(mod n)有解,且x0是方 ...

  8. 求逆元(线性求逆元)及其扩展欧几里得

    线性求逆元模板: int inv[maxn]; void initInverse(){inv[1] = 1;for(int i = 2; i <= maxn; i++)inv[i] = (p - ...

  9. 欧几里得及扩展欧几里得算法

    欧几里得算法 这个就是常说的辗转相除法,用于计算两个整数 $a,b$ 的最大公约数,即$$gcd(a,b)=gcd(b,a\;mod\;b)$$ int gcd(int a,int b){return ...

最新文章

  1. 没有熙熙攘攘,百度VR在世界大会的一场奇妙之旅
  2. 多线程环境中安全使用集合API(含代码)
  3. 忘记手机绑定过的UC/交易猫账号怎么找回
  4. 在Web中如何运用JavaScript实现打印功能
  5. Hadoop, Hbase
  6. 【SLAM】安装 g2o_viewer
  7. 根可达算法的根_我的JVM(六):GC的基础概念以及GC算法
  8. (计算机组成原理)第七章输入和输出系统-第四节3:I/O方式之DMA方式
  9. Netty是如何解决粘包和拆包问题的
  10. 随想录(英语学习的几个误区)
  11. android 广告close,小程序广告弹出与关闭
  12. 【图像去噪】基于matlab GUI均值+中值+空间+高斯滤波图像去噪【含Matlab源码 763期】
  13. 电子产品硬件开发流程
  14. 搭建ftp服务器的超详细步骤。
  15. MarkDown思维导图
  16. 计算机软件专业硕士论文,软件工程硕士论文范文
  17. 计算机网络课程设计组建大型网吧局域网,计算机网络课程设计报告—组建大型网吧局域网.doc...
  18. 深入理解C# Unity List集合去除重复项 Distinct
  19. Spring的AOP(一):什么是AOP
  20. SVN的分支是做什么的?

热门文章

  1. 一篇讲清:数据采集中的安全与隐私
  2. 手把手教你webpack3(3)入口(多入口)entry
  3. statCVS的问题剖析
  4. Modbus网口设备接入多比物联网云平台教程
  5. Triangular Sums http://acm.nyist.net/JudgeOnline/problem.php?pid=122
  6. get方式乱码及MAC异常
  7. Cisco路由器交换机安全配置
  8. how to add one row in the dataframe?
  9. questions for the exploitation of technologies
  10. Hd2087 剪花布条