欧拉函数

定义

对于正整数n,欧拉函数是小于或等于n的正整数中与n互质的数的数目,记作φ(n).

算法思路

既然求解每个数的欧拉函数,都需要知道他的质因子,而不需要个数

因此,我们只需求出他的质因子,然后根据公式:N*(p1-1)/p1*(p2-1)/p2......即可

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. ll n;
  5.  
  6. int main()
  7. {
  8. ll i,j;
  9. cin>>n;
  10. for(i=0;i<n;i++)
  11. {
  12. ll x;
  13. cin>>x;
  14. ll ans=x;
  15. for(j=2;j<=x/j;j++)
  16. {
  17. if(x%j==0)
  18. {
  19. ans=ans*(j-1)/j;
  20. while(x%j==0)
  21. {
  22. x/=j;
  23. }
  24. }
  25. }
  26. if(x!=1)
  27. ans=ans*(x-1)/x;
  28. cout<<ans<<endl;
  29. }
  30. return 0;
  31. }

筛法求欧拉函数

问题

给定一个正整数n,求1~n中每个数的欧拉函数之和。

算法思路

使用线性筛的方法,来求每个数的欧拉函数

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. const int N=1e6+10;
  4. int n,cnt;
  5. bool st[N];
  6. int primes[N];
  7. int phi[N];
  8.  
  9. void get_eulers()
  10. {
  11. int i,j;
  12. phi[1]=1;
  13. for(i=2;i<=n;i++)
  14. {
  15. if(!st[i])
  16. {
  17. primes[cnt++]=i;
  18. phi[i]=i-1;
  19. for(j=0;primes[j]<=n/i;j++)
  20. {
  21. st[primes[j]*i]=true;
  22. if(i%primes[j]==0)
  23. phi[primes[j]*i]=primes[j]*phi[i];
  24. else
  25. phi[primes[j]*i]=(primes[j]-1)*phi[i];
  26. }
  27. }
  28. }
  29. int ans=0;
  30. for(i=1;i<=n;i++)
  31. ans+=phi[i];
  32. cout<<ans<<endl;
  33. }
  34.  
  35. int main()
  36. {
  37. int i,j;
  38. cin>>n;
  39.  
  40. get_eulers();
  41.  
  42. return 0;
  43. }

快速幂

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4.  
  5. void suppow(ll a,ll b,ll p)
  6. {
  7. ll ans=1;
  8. while(b)
  9. {
  10. if(b&1)
  11. ans=(ans*a)%p;
  12. a=(a*a)%p;
  13. b>>=1;
  14. }
  15. cout<<ans%p<<endl;
  16. }
  17.  
  18. int main()
  19. {
  20. ll n,a,b,p;
  21. cin>>n;
  22. while(n--)
  23. {
  24. cin>>a>>b>>p;
  25. suppow(a,b,p);
  26. }
  27.  
  28. return 0;
  29. }

快速幂求逆元

前提

代码

快速幂求解:

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. const int maxn=1e5+10;
  5.  
  6. ll supow(ll a,ll b,ll p)
  7. {
  8. ll ans=1;
  9. while(b)
  10. {
  11. if(b&1)
  12. ans=ans*a%p;
  13. a=a*a%p;
  14. b>>=1;
  15. }
  16. return ans;
  17. }
  18.  
  19. int main()
  20. {
  21. ll a,p,n;
  22. cin>>n;
  23. while(n--)
  24. {
  25. cin>>a>>p;
  26. if(a%p!=0)
  27. {
  28. cout<<supow(a,p-2,p)<<endl;
  29. }
  30. else
  31. puts("impossible");
  32. }
  33. return 0;
  34. }

扩展欧几里得求逆元

  1. #include <iostream>
  2. using namespace std;
  3. typedef long long LL;
  4. int n;
  5.  
  6. int exgcd(int a, int b, int &x, int &y)
  7. {
  8. if (!b) {
  9. x = 1, y = 0;
  10. return a;
  11. }
  12. int d = exgcd(b, a % b, y, x);
  13. y -= a / b * x;
  14. return d;
  15. }
  16.  
  17. int main()
  18. {
  19. cin >> n;
  20. while (n --)
  21. {
  22. int a, p, x, y;
  23. // if (a < p) swap(a, p);
  24. cin >> a >> p;
  25. int d = exgcd(a, p, x, y);
  26. if (d == 1) cout << ((LL)x + p) % p << endl;//保证x是正数
  27. else puts("impossible");
  28.  
  29. }
  30. return 0;
  31. }

数学知识-欧拉函数&快速幂的更多相关文章

  1. hdu 3307 Description has only two Sentences (欧拉函数+快速幂)

    Description has only two SentencesTime Limit: 3000/1000 MS (Java/Others) Memory Limit: 65536/32768 K ...

  2. XMU 1615 刘备闯三国之三顾茅庐(三) 【欧拉函数+快速幂+欧拉定理】

    1615: 刘备闯三国之三顾茅庐(三) Time Limit: 1000 MS  Memory Limit: 128 MBSubmit: 45  Solved: 8[Submit][Status][W ...

  3. 牛客训练:小a与黄金街道(欧拉函数+快速幂)

    题目链接:传送门 思路:欧拉函数的性质:前n个数的欧拉函数之和为φ(n)*n/2,由此求出结果. 参考文章:传送门 #include<iostream> #include<cmath ...

  4. Exponial (欧拉定理+指数循环定理+欧拉函数+快速幂)

    题目链接:http://acm.csu.edu.cn/csuoj/problemset/problem?pid=2021 Description Everybody loves big numbers ...

  5. 小a与黄金街道(欧拉函数+快速幂)

    链接:https://ac.nowcoder.com/acm/contest/317/D 来源:牛客网 题目描述 小a和小b来到了一条布满了黄金的街道上.它们想要带几块黄金回去,然而这里的城管担心他们 ...

  6. 【BZOJ 1409】 Password 数论(扩展欧拉+矩阵快速幂+快速幂)

    读了一下题就会很愉快的发现,这个数列是关于p的幂次的斐波那契数列,很愉快,然后就很愉快的发现可以矩阵快速幂一波,然后再一看数据范围就......然后由于上帝与集合对我的正确启示,我就发现这个东西可以用 ...

  7. CF思维联系– CodeForces -CodeForces - 992C Nastya and a Wardrobe(欧拉降幂+快速幂)

    Nastya received a gift on New Year - a magic wardrobe. It is magic because in the end of each month ...

  8. UVaLive 7362 Farey (数学,欧拉函数)

    题意:给定一个数 n,问你0<= a <=n, 0 <= b <= n,有多少个不同的最简分数. 析:这是一个欧拉函数题,由于当时背不过模板,又不让看书,我就暴力了一下,竟然A ...

  9. 数学之欧拉函数 &几道poj欧拉题

    欧拉函数总结+证明 欧拉函数总结2 POJ 1284 原根 #include<iostream> #include<cstdio> #include<cstring> ...

随机推荐

  1. URL重定向 - Pikachu

    概述: 不安全的url跳转问题可能发生在一切执行了url地址跳转的地方.如果后端采用了前端传进来的(可能是用户传参,或者之前预埋在前端页面的url地址)参数作为了跳转的目的地,而又没有做判断的话就可能 ...

  2. [Usaco2007 Dec]宝石手镯

    题目描述 贝茜在珠宝店闲逛时,买到了一个中意的手镯.很自然地,她想从她收集的 N(1 <= N <= 3,402)块宝石中选出最好的那些镶在手镯上.对于第i块宝石,它的重量为W_i(1 & ...

  3. HTML基础复习1

    网页:HTML(超文本标记语言) 网页分为静态网页和动态网页,区别:动态网页中可以加入脚本代码,还可以动态的引入数据库中的信息. HTML的结构 <html> <head>头信 ...

  4. Nginx架构赏析

    淘宝的某位大佬曾经做过测试,在一台24G内存的机器上,Nginx的最大并发连接数达到了200万.同学们听到这个结论后,是不是被Nginx的超高性能深深折服了,它内部的架构设计究竟是怎么样的呢?这篇文章 ...

  5. uni-app开发经验分享五: 解决三端页面兼容问题的方法

    在做uni-app开发的过程中,我们最头疼可能不是开发的过程中的逻辑,而是最后要做的三端兼容测试和修改,在我开发的项目中,这一步都是最头疼和令人头秃的过程,这里总结一些个人开发遇到的问题,希望对大家有 ...

  6. 深圳某小公司面试题:AQS是什么?公平锁和非公平锁?ReentrantLock?

    AQS总体来说没有想象中那么难,只要了解它的实现框架,那理解起来就不是什么问题了. AQS在Java还是占很重要的地位的,面试也是经常会问. 目前已经连载11篇啦!进度是一周更新两篇,欢迎持续关注 [ ...

  7. windows10复制粘贴键突然失效无法复制粘贴的最简单办法

    报了学习班,打开了VCE的加密文档 今天复制粘贴键突然失效 在网上捣鼓了好多方法都不行最后发现看看你有没有在用加密文件,也就是网课类的文档和视频.有就把它关了关了就好了

  8. 主题模型(Topic)

    消息队列 RocketMQ - 打造金融级消息服务 - 阿里云 https://www.aliyun.com/product/rocketmq 主题模型(Topic) 发布/订阅(Pub/Sub) 一 ...

  9. HTTP/1HTTP/2HTTP/3

    https://mp.weixin.qq.com/s/fy84edOix5tGgcvdFkJi2w

  10. status http status code 状态码

    RFC 6585 - Additional HTTP Status Codes https://tools.ietf.org/html/rfc6585 https://developer.mozill ...