• 100085G GCD Guessing Game


    传送门

    题目大意

    给定一个数N,现在又一个数x,在1~N之间,现在每次可以猜一个数a,返回gcd(x,a),问说最少猜几次可以确定x。

    分析

    这个题应该可以算是贪心,但是没人知道这样为啥是对的(雾),我们现在来感性认识一下,我们知道对于任意一个数都可以写p1e1p2e2 ... 的形式,所以我们在每一次询问都可以确定有些p是否存在,如果存在我们在来确定它对应的e,这样只需要两次,而我们感性思考可以猜出没猜到一个p并确认一个e用去两次却可以直接否定很多其它的p,所以猜的次数一定小于等于确认所有p的次数,所以便可以按照下面的代码进行求解。

    代码

    #include<bits/stdc++.h>
    using namespace std;
    int dq[11000],L=1,R=0;
    inline bool is(int x){
          int i;
          for(i=2;i*i<=x;i++)
            if(x%i==0)return 0;
          return 1;
    }
    int main(){
          freopen("gcd.in","r",stdin);
          freopen("gcd.out","w",stdout);
          int n,i,ans=0;
          scanf("%d",&n);
          for(i=2;i<=n;i++)
            if(is(i))
              dq[++R]=i;
          while(L<=R){
              while(dq[L]*dq[R]<=n){
                L++;
                dq[R]*=dq[L];
              }
              R--;
              ans++;
          }
          cout<<ans<<endl;
          return 0;
    }
  • 相关阅读:
    Thinkphp学习笔记2-
    Thinkphp学习笔记1-URL模式
    WebApi-如何实现接口加密
    微信-.NET调用JS-SDK
    微信-JSSDK .NET版
    HTML-获取/修改html页面标题
    JS-获取图片地址
    微信-js sdk invalid signature签名错误 问题解决
    C++笔试题
    单链表反转的分析及实现
  • 原文地址:https://www.cnblogs.com/yzxverygood/p/9406556.html
Copyright © 2020-2023  润新知