zoukankan      html  css  js  c++  java
  • nyoj998——欧拉+折半查找

    Sum

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

                给你一个数N,使得在1~N之间能够找到x使得x满足gcd( x ,  N  ) >= M,

    求解gcd(x,N)的和

     
    输入
    多组测试数据

    每行输出两个数N,M(N,M不超int)
    输出
    输出sum
    样例输入
    5 3
    样例输出
    5
    上传者
    ACM_张书军
    #include <bits/stdc++.h>
    using namespace std;
    typedef long long  ll;
    const int INF = 0x3f3f3f3f;
    const int maxn = 2000;
    const int moder = 10003;
    
    ll eular(ll n)
    {
        ll ans = n;
        for(int i=2;i*i <= n;i++){
            if(n%i == 0){
                ans = ans - ans/i;
                while(n%i == 0)
                    n = n/i;
            }
        }
        if(n > 1)
            ans = ans - ans/n;
        return ans;
    }
    int main()
    {
        ll n,m;
        while(scanf("%lld%lld",&n,&m)!=EOF){
            ll res = 0;
            for(int i=1;i*i <= n;i++) {
                if (n % i == 0) {
                    if (i >= m) {
                        res += i * eular(n / i);
                    }
                    if (i * i != n && n / i >= m){
                        res += n/i*eular(i);
                    }
                }
            }
            printf("%lld
    ",res);
        }
        return 0;
    }

    ————很巧妙的运用了欧拉函数

  • 相关阅读:
    CSS中z-index的层级树概念
    随记
    PHP 随笔
    linux 相关
    Nginx 虚拟主机 VirtualHost 配置
    PHP 杂记
    Composer 资料
    PHP Yii架构学习
    java 日志技术汇总(log4j , Commons-logging,.....)
    Java 随笔
  • 原文地址:https://www.cnblogs.com/cunyusup/p/8490336.html
Copyright © 2011-2022 走看看