zoukankan      html  css  js  c++  java
  • hdu 4983 欧拉函数

    http://acm.hdu.edu.cn/showproblem.php?pid=4983

    求有多少对元组满足题目中的公式。

    对于K=1的情况,等价于gcd(A, N) * gcd(B, N) = N,我们枚举 gcd(A, N) = g,那么gcd(B, N) = N / g。问题转化为统计满足 gcd(A, N) = g 的 A 的个数。这个答案就是 ɸ(N/g)
    只要枚举 N 的 约数就可以了。答案是 Σɸ(N/g)*ɸ(g) g | N

    暴力即可

    #include <cstdio>
    #include <cstdlib>
    #include <cmath>
    #include <cstring>
    #include <string>
    #include <queue>
    #include <map>
    #include <iostream>
    #include <algorithm>
    using namespace std;
    #define RD(x) scanf("%d",&x)
    #define RD2(x,y) scanf("%I64d%d",&x,&y)
    #define RD3(x,y,z) scanf("%d%d%d",&x,&y,&z)
    #define clr0(x) memset(x,0,sizeof(x))
    typedef long long LL;
    const int modo = 1e9 + 7;
    int k;
    
    LL euler_phi(LL n) {
        LL m = sqrt(n+0.5);
        LL ret = n;
        for (LL i = 2; i <= m; i++) {
            if (n % i == 0) {
                ret = ret / i * (i-1);
                while (n%i==0)
                    n /= i;
                if(n == 1)
                    break;
            }
        }
    
        if (n > 1)
            ret = ret / n * (n - 1);
        return ret;
    }
    LL n;
    int main() {
    //	int _;RD(_);while(_--){
    //	    ;
    //	}
        while(~RD2(n,k)){
            if(n == 1 || k == 2)
                puts("1");
            else if(k > 2)
                puts("0");
            else{
                LL ans = 0;
                LL m = sqrt(n + 0.5);
                for(LL i = 1;i <= m;++i){
                    if(n % i == 0){
                        ans = (ans + euler_phi(i)*euler_phi(n/i)*2) % modo;
                    }
                }
                if(m*m == n){
                    ans = (ans + modo - euler_phi(m)*euler_phi(m)) % modo;
                }
                printf("%I64d
    ",ans);
            }
        }
    	return 0;
    }
    


  • 相关阅读:
    三、Oracle 查询+where条件
    二、Oracle 数据库基本操作
    一、Oracle 安装
    18.JAVA经典编程题(50题及答案)
    17.网络编程
    16.xml
    Js模块化开发--seajs和gruntJs
    git命令行指南
    nodejs学习笔记---1
    面向对象及组件开发---笔记1
  • 原文地址:https://www.cnblogs.com/zibaohun/p/4046818.html
Copyright © 2011-2022 走看看