当前位置: 首页 > news >正文

网站开发毕业设计收获与体会/最大免费广告发布平台

网站开发毕业设计收获与体会,最大免费广告发布平台,wordpress付费建站,网络科技有限公司排名欧拉函数,用φ(n)表示 欧拉函数是求小于等于n的数中与n互质的数的数目 辣么,怎么求哩?~(~o ̄▽ ̄)~o 可以先在1到n-1中找到与n不互质的数,然后把他们减掉 比如φ(12) 把12质因数分解&a…

欧拉函数,用φ(n)表示

欧拉函数是求小于等于n的数中与n互质的数的数目

 

 

 

辣么,怎么求哩?~(~o ̄▽ ̄)~o

 

可以先在1到n-1中找到与n不互质的数,然后把他们减掉

 

比如φ(12)

把12质因数分解,12=2*2*3,其实就是得到了2和3两个质因数

然后把2的倍数和3的倍数都删掉

2的倍数:2,4,6,8,10,12

3的倍数:3,6,9,12

 

本来想直接用12 - 12/2 - 12/3

但是6和12重复减了

所以还要把即是2的倍数又是3的倍数的数加回来 (>﹏<)

所以这样写12 - 12/2 - 12/3 + 12/(2*3)

这叫什么,这叫容斥啊,容斥定理听过吧

比如φ(30),30 = 2*3*5

所以φ(30) = 30 - 30/2 - 30/3 - 30/5 + 30/(2*3) + 30/(2*5) + 30/(3*5) - 30/(2*3*5)

 

但是容斥写起来好麻烦( ̄. ̄)

有一种简单的方法

φ(12)   =   12*(1 - 1/2)*(1 - 1/3)                 =   12*(1 - 1/2 - 1/3 + 1/6)

φ(30)   =   30*(1 - 1/2)*(1 - 1/3)*(1 - 1/5)   =   30*(1 - 1/2 - 1/3 - 1/5 + 1/6 + 1/10 + 1/15 - 1/30)

你看( •̀∀•́ ),拆开后发现它帮你自动帮你容斥好

 

所以φ(30)的计算方法就是先找30的质因数

分别是2,3,5

然后用30* 1/2 * 2/3 * 4/5就搞定了

 

顺便一提,phi(1) = 1

代码如下:

 1 //欧拉函数
 2 int phi(int x){
 3     int ans = x;
 4     for(int i = 2; i*i <= x; i++){
 5         if(x % i == 0){
 6             ans = ans / i * (i-1);
 7             while(x % i == 0) x /= i;
 8         }
 9     }
10     if(x > 1) ans = ans / x * (x-1);
11     return ans;
12 }

 

 

(phi就是φ的读音)

 

 

机智的代码,机智的我(。・`ω´・)

 

 

这个的复杂度是O(√n),如果要你求n个数的欧拉函数,复杂度是O(n√n),这也太慢了

 

 

有更快的方法

跟埃筛素数差不多

 1 #include<cstdio>
 2 const int N = 100000 + 5;
 3 int phi[N];
 4 void Euler(){
 5     phi[1] = 1;
 6     for(int i = 2; i < N; i ++){
 7         if(!phi[i]){
 8             for(int j = i; j < N; j += i){
 9                 if(!phi[j]) phi[j] = j;
10                 phi[j] = phi[j] / i * (i-1);
11             }
12         }
13     }
14 }
15 int main(){
16     Euler();
17 }

 

(Euler就是欧拉)

 

 

另一种,比上面更快的方法

需要用到如下性质

p为质数

1. phi(p)=p-1   因为质数p除了1以外的因数只有p,故1至p的整数只有p与p不互质 

2. 如果i mod p = 0, 那么 phi(i * p)=phi(i) * p         (我不会证明)

3.若i mod p ≠0,  那么 phi( i * p )=phi(i) * ( p-1 )   (我不会证明)

(所以我说我会证明都是骗人的╮( ̄▽ ̄)╭)

 

代码如下:

 1 #include<cstdio>
 2 using namespace std;
 3 const int N = 1e6+10 ;
 4 int phi[N], prime[N];
 5 int tot;//tot计数,表示prime[N]中有多少质数 
 6 void Euler(){
 7     phi[1] = 1;
 8     for(int i = 2; i < N; i ++){
 9         if(!phi[i]){
10             phi[i] = i-1;
11             prime[tot ++] = i;
12         }
13         for(int j = 0; j < tot && 1ll*i*prime[j] < N; j ++){
14             if(i % prime[j]) phi[i * prime[j]] = phi[i] * (prime[j]-1);
15             else{
16                 phi[i * prime[j] ] = phi[i] * prime[j];
17                 break;
18             }
19         }
20     }
21 }
22  
23 int main(){
24     Euler();
25 }

 

 

 

 

最后说下

 

a^b % p  不等价  (a%p)^(b%p) % p

因为

a^φ(p) ≡ 1 (mod p)

 

所以

a^b % p  =  (a%p)^(b%φ(p)) % p

(欧拉函数前提是a和p互质)

欧拉求余1

如果p是质数

直接用这个公式

欧拉求余2

 

 

 

 

 

机智的代码,机智的我(。・`ω´・)

 

 

 

 ///

2016年7月23号

我的天哪,我又发现了一个新公式,貌似可以摆脱a和p互质的束缚,让我们来命名为:超欧拉取模进化公式

 

 

这是历史性的一刻,妈妈再也不用为a和p不互质而担心了= =

 

 

 

转载于:https://www.cnblogs.com/linyujun/p/5194170.html

http://www.jmfq.cn/news/5252365.html

相关文章:

  • 深圳顶级做网站公司排名/seo包年优化
  • soho做网站谷歌推广/seo技术306
  • jquery mobile网站模板/百度广告联盟怎么赚钱
  • 大的网站建设公司/网站seo基本流程
  • 建站模板大全/网络营销策略有哪五种
  • 中国建设教育网证件查询/seo站长工具查询系统
  • 网站文章做百度排名/昆明seo网站管理
  • 章丘哪里有建设网站的/怎么做好seo内容优化
  • 阿里巴巴怎么做公司网站/推广app用什么平台比较好
  • 知名高端网站建设服务商/江苏seo平台
  • 简单做网站用什么软件/搭建网站平台需要多少钱
  • 360免费网站建设/百度账号官网
  • 值得相信的西安网站开发/网站一级域名和二级域名区别
  • 北京市网站备案查询/线上推广策划方案范文
  • 东莞常平疫情最新情况/武汉seo招聘
  • php会了 怎么做网站/德州seo整站优化
  • jsp做的网站运行都需要什么/优化网站做什么的
  • 重庆市永川区城乡建设委员会网站/百度seo优化推广公司
  • 班服定制的网站/广州seo优化排名公司
  • 南宁网站建设专家/网络营销策划书结构
  • 营销型网站建设实训总结/全国疫情排行榜最新情况列表
  • 有效方法的小企业网站建设/服务推广软文范例
  • 禁止同ip网站查询/seo是什么东西
  • 族蚂建站/金花关键词工具
  • 网络营销毕业后做什么工作/百度关键词优化大
  • google网站优化器/短视频营销常用平台有
  • 网站更换图片之类的怎么做/app推广拉新接单平台
  • 建站软件公司/品牌推广是做什么的
  • 网页设计规范大全/sem优化公司
  • 黄岐网站制作/如何查询百度收录