列表

详情


NC217463. 小G的GCD

描述

小G刚学习完辗转相除法求GCD,现在他想探究一下辗转相除具体的次数。
然后写出了如下代码:
long long GCD(long long x, long long y) {      if (!y) return 1ll;      return GCD(y, x % y) + 1ll; }
现在小G很好奇一个问题,他想求一下maxGCD
小G接着写出了以下代码:
long long maxGCD(long long n) {      long long ans = 0ll;      for (long long i = 1; i <= n; i++)          for (long long j = 1; j <= n; j++)              ans = max(ans, GCD(i, j));      return ans;  } 
但是这个代码太慢了,小G会给出一个,希望你帮他快速求出答案。

输入描述

一个正整数

输出描述

输出maxGCD。

示例1

输入:

20

输出:

7

说明:


原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++(clang++11) 解法, 执行用时: 2ms, 内存消耗: 380K, 提交时间: 2021-03-28 14:19:29

#include<bits/stdc++.h>
using namespace std;
int main()
{
    unsigned long long n;cin>>n;
    cout<<(int)(log(sqrt(5)*n+1.5)/log((1+sqrt(5))/2));
    return 0;
}

pypy3(pypy3.6.1) 解法, 执行用时: 45ms, 内存消耗: 18704K, 提交时间: 2021-03-27 17:20:03

if __name__=="__main__":
    n=int(input())
    a,b=1,1
    ans=2
    while(a+b<=n):
        a,b=a+b,a
        ans+=1
    print(ans)

Python3(3.9) 解法, 执行用时: 19ms, 内存消耗: 2808K, 提交时间: 2021-03-26 22:14:59

n = int(input())
a1 , a2 = 1 ,1
awn = 1
while a2<=n:
    a1 , a2 = a2 , a1 + a2
    awn += 1
print(awn)

上一题