• NYOJ-欧几里得


    欧几里得

    时间限制:1000 ms  |  内存限制:65535 KB
    难度:0
    描写叙述

    已知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

    代码:

    #include<stdio.h>
    #include<string.h>
    char a[1001];
    int b[1001];
    int main()
    {
    	int T;
    	scanf("%d",&T);
    	while(T--)
    	{
    		int i,j;
    		scanf("%s",a);
    		int len=strlen(a);
    		if(strcmp(a,"1")==0)
    		{
    			printf("1
    ");
    			continue;
    		}
    		for(i=len-1,j=0;i>=0;--i,++j)
    		b[j]=a[i]-'0';
    		if(b[0]!=0)
    		{
    		  b[0]=b[0]-1;
    	    }
    		else
    		{
    			b[0]=10-1;
    			b[1]--;
    			for(i=1;i<len;++i)
    			{
    			  if(b[i]<0)	
    			  {
    			  	b[i]=b[i]+10;
    			  	b[i+1]--;
    			  }
    			  else
    			  break;
    			}
    		}
    		if(b[len-1]==0)
    		len--;
    		for(i=len-1;i>=0;--i)
    		printf("%d",b[i]);
    		printf("
    ");
    		
    	}
    	return 0;
    }

    解题思路:

    相邻的的两个数最大公约数恒为 1,所以1~n中最大的X使得Gcd(x,n)==1,则x=n-1;【注意特列:当n=1时X=1】

  • 相关阅读:
    spring事务调用失效问题
    redis的主从、哨兵配置
    Lucene介绍与入门使用
    超详细“零”基础kafka入门篇
    消息队列——RabbitMQ学习笔记
    linux中RabbitMQ安装教程
    JAVA正则
    JAVA String类
    JAVA lang包介绍
    JAVA枚举
  • 原文地址:https://www.cnblogs.com/tlnshuju/p/6863672.html
Copyright © 2020-2023  润新知