欧拉函数 求小于某个数并与其互质的数的个数

 1 const int maxn=32790;
 2 int euler[maxn+2];
 3 void make()
 4 {
 5     euler[1]=0;
 6     for(int i=2;i<=maxn;++i)
 7         euler[i]=i;
 8     for(int i=2;i<=maxn;++i)
 9         if(euler[i]==i)
10             for(int j=i;j<=maxn;j+=i)
11                 euler[j]=euler[j]/i*(i-1);
12 }

euler[n]代表的就是在n之前与n互质的数的个数

时间: 2024-11-03 22:30:19

欧拉函数 求小于某个数并与其互质的数的个数的相关文章

一个简单的公式——求小于N且与N互质的数的和

首先看一个简单的东西. 若gcd(i,n)=1,则有gcd(n-i,n)=1. 于是在小于N且与N互质的数中,i与n-i总是成对存在,且相加等于n. 考虑i=n-i的特殊情况,此时n=2*i,由gcd(i,n)=1,得n=2.此时手动计算ans=1. 因为小于N且与N互质的数的个数为φ(n),于是我们可以得出公式ans=n*φ(n)/2.

给定你一个数n,找出在[a,b]这个区间中和n互质的数的个数。

解题思路:求[a,b]区间内与n互质的数的个数,我们可以转化为[1,b]内与n互质的数的个数减去[1,a-1]内与n互质的数的个数 而要求[1,b]内与n互质的数的个数,我们可以很自然地想到容斥原理 求解区间[a,b]中与k互质的个数 首先对k进行质数分解,然后与这个因子GCD!=1则共有n/ki个 有计算重复的部分,因此利用 容斥原理: k1+k2+k3-k1*k2-.....求出与k不互质的个数,用总的减去即可 Description 给定你一个数n,请你统计出在[a,b]这个区间中和n互质

UVA 12493 Stars (欧拉函数--求1~n与n互质的个数)

https://uva.onlinejudge.org/index.phpoption=com_onlinejudge&Itemid=8&category=279&page=show_problem&problem=3937 题目:http://acm.bnu.edu.cn/v3/external/124/12493.pdf 大致题意:圆上有偶数n个点,每间隔m个点连起来,最后可以把所有点串联起来就合法.问有多少个m可以完成串联,串联后形状相同的算重复 n <2^31

poj 2773 利用欧拉函数求互质数

题意:找到与n互质的第 k个数 开始一看n是1e6 敲了个暴力结果tle了,后来发现k达到了 1e8 所以需要用到欧拉函数. 我们设小于n的 ,与n互质的数为  (a1,a2,a3.......a(phi(n))) 那么显然,在区间  [ k*n , (k+1)*n ]内的互质数即为 k*n+(a1,a2,a3.......a(phi(n))) 所以只需要求出 (a1,a2,a3.......a(phi(n))) 就可以利用欧拉函数快速找到后面的数 代码如下: #include <iostrea

POJ 1284-Primitive Roots(欧拉函数求原根)

Primitive Roots Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%I64d & %I64u Submit Status Practice POJ 1284 Appoint description:  System Crawler  (2015-04-06) Description We say that integer x, 0 < x < p, is a primitive root mod

hdoj 1787 GCD Again【欧拉函数】

GCD Again Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2673    Accepted Submission(s): 1123 Problem Description Do you have spent some time to think and try to solve those unsolved problem af

hdu2588 gcd 欧拉函数

GCD Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1567    Accepted Submission(s): 751 Problem Description The greatest common divisor GCD(a,b) of two positive integers a and b,sometimes writte

数论快速入门(同余、扩展欧几里德、中国剩余定理、大素数测定和整数分解、素数三种筛法、欧拉函数以及各种模板)

数学渣渣愉快的玩了一把数论,来总结一下几种常用的算法入门,不过鶸也是刚刚入门, 所以也只是粗略的记录下原理,贴下模板,以及入门题目(感受下模板怎么用的) (PS:文中蓝色字体都可以点进去查看百度原文) 附赠数论入门训练专题:点我打开专题(题目顺序基本正常,用以配套数论入门) 一.同余定理 简单粗暴的说就是:若 a-b == m 那么 a%m == b%m 这个模运算性质一眼看出...直接上入门水题: Reduced ID Numbers 附AC代码(这个也没啥模板....知道就好) #inclu

HDU1695-GCD(数论-欧拉函数-容斥)

GCD Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 5454    Accepted Submission(s): 1957 Problem Description Given 5 integers: a, b, c, d, k, you're to find x in a...b, y in c...d that GCD(x, y