小a与黄金街道 拓展欧拉定理

登录—专业IT笔试面试备考平台_牛客网

https://ac.nowcoder.com/acm/contest/317/D

前置知识:欧拉函数

φ函数的值  通式:φ(x)=x(1-1/p1)(1-1/p2)(1-1/p3)(1-1/p4)…..(1-1/pn),其中p1, p2……pn为x的所有质因数,x是不为0的整数。φ(1)=1(唯一和1互质的数(小于等于1)就是1本身)。 (注意:每种质因数只一个。比如12=223那么φ(12)=12(1-1/2)(1-1/3)=4)
----摘自百度

接下来怎么求欧拉函数呢

LL mul(LL x, LL y,LL p) {
    LL ans=0;
    while(y){
        if(y&1)ans+=x%p;
        y>>=1;
        x+=x%p;
    }
    return ans ;
}
LL Phi(LL N) {
    LL ans = 1;
    for(LL i = 2; i * i <= N; i++) {
        if(!(N % i)) {
            ans = mul(ans, i - 1); N /= i;
            while(!(N % i)) ans *= i, N /= i;
        }
    }
    if(N ^ 1) ans *= N - 1;//n是否为1
    return ans;
}

O(根号n)的复杂度,加上位运算
是我见过挺好的模板

小a与黄金街道
反正意思就不说了
挺巧妙的

1到n的所有gcd(n,x)==1的所有x数的和为n*φ(n)/2

牛客上的题解有说怎么来的

所以呢
这题套公式就好了
以下代码出自题解

#include<bits/stdc++.h>
#define LL long long
#define int long long  
using namespace std;
const LL mod = 1e9 + 6, mod2 = mod + 1;
LL N, K, A, B;
LL add(LL x, LL y) {
    if(x + y < 0) return x + y + mod;
    return x + y >= mod ? x + y - mod : x + y;
}
LL mul(LL x, LL y) {
    return 1ll * x * y % mod;
}
LL fp(LL a, LL p, LL mod) {
    p %= mod;
    LL base = 1;
    while(p) {
        if(p & 1) base = base * a % mod;
        a = a * a % mod; p >>= 1;
    }
    return base;
}
LL Phi(LL N) {
    LL ans = 1;
    for(LL i = 2; i * i <= N; i++) {
        if(!(N % i)) {
            ans = mul(ans, i - 1); N /= i;
            while(!(N % i)) ans *= i, N /= i;
        }
    }
    if(N ^ 1) ans *= N - 1;
    return ans;
}
signed main() {
    cin >> N >> K >> A >> B;
    LL Lim = 1e13;
    assert(A >= 1 && A <= Lim && B >= 1 && B <= Lim);
    LL tmp = ((N % mod) * ((Phi(N) / 2) % mod) % mod) ;
    LL ans = (A + B) % mod2 * fp(K % mod2, tmp, mod2) % mod2;
    cout << ans;
    return 0;
}

这个signed main也很秀
long long 不能作为主函数类型,而防止int溢出,很秀的操作

assert终止函数

图片说明
这是个拓展欧拉定理,吉比特杯学到的

因为Phi(1e9+7)=1e9+6
所以那个指数模的就是1e9+6

原来如此

今儿就到这

全部评论

相关推荐

面试官全程关摄像头1.自我介绍一下2.React和Vue哪个更熟悉一点3.你在之前那段实习经历中有没有什么技术性的突破(我只是实习了44天工作28天,我把我能说的都说了)4.你封装的哪个表单组件支不支持动态传值5.自己在实习阶段Vue3项目封装过hook吗6.hook有什么作用7.Vue2和Vue3的响应式区别(我说一个是proxy是拦截所有的底层操作,Object.defineProperty本身就是一个底层操作,有些东西拦截不了,比如数组的一些操作还有等等,面试官就说实在要拦截能不能拦截????我心想肯定不行呀,他的底层机制就不允许吧)8.pinia和vuex的区别(这个回答不出来是我太久没用了)9.pinia和zustand的区别,怎么选(直接给我干懵了)(我说react能用pinia吗&nbsp;&nbsp;他说要用的话也可以)10.渲染一万条数据,怎么解决页面卡顿问题(我说分页、监听滚轮动态加载,纯数据展示好像还可以用canvas画)(估计是没说虚拟表单,感觉不满意)11.type和interface的区别12.ts的泛型有哪些作用(我就说了一个结构相同但是类型不同的时候可以用,比如请求响应的接口,每次的data不同,这里能用一个泛型,他问我还有什么)13.你项目用的是React,如果让你再写一遍你会选择什么14.pnpm、npm、yarn的区别15.dependencies和devdependencies的区别总而言之太久没面试了,上一段实习的面试js问了很多。结果这次js一点没问,网络方面也没考,表现得很一般,但是知道自己的问题了&nbsp;&nbsp;好好准备,等待明天的影石360和周四的腾讯了&nbsp;&nbsp;加油!!!
解zj:大三的第一段面试居然是这样的结局
查看15道真题和解析
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务