简单数论
每天一个没用的 数论小知识
1.判断1/n是否是无限循环小数
思路:n的因子全为2和5是有限,否则为无限
题目
2.线性筛
#include <cstring>
using namespace std;
int prime[1100000],primesize,phi[11000000];
bool isprime[11000000];
void getlist(int listsize)
{
memset(isprime,1,sizeof(isprime));
isprime[1]=false;
for(int i=2;i<=listsize;i++)
{
if(isprime[i])prime[++primesize]=i;
for(int j=1;j<=primesize&&i*prime[j]<=listsize;j++)
{
isprime[i*prime[j]]=false;
if(i%prime[j]==0)break;
}
}
}
直接判断素数
void init()
{
for(int i=2;i<=MAXN;i++)
if(!r[i]) //判断i是否为素数
{
for(int j=i;j<=MAXN;j+=i)
r[j]++; //i在范围内的倍数的质因子种类数++
}
}
3. l c m ( a , b ) ∗ g c d ( a , b ) = a ∗ b lcm(a,b)*gcd(a,b)=a*b lcm(a,b)∗gcd(a,b)=a∗b
A.
l
c
m
lcm
lcm 一定是
g
c
d
gcd
gcd 的倍数
B.
g
c
d
(
a
,
b
)
gcd(a,b)
gcd(a,b) 是a,b的质因子的交集
C. l c m ( a , b ) lcm(a,b) lcm(a,b) 是a,b的质因子的并集
例题: CF The Number of Pairs
4.
p
h
i
(
x
)
phi(x)
phi(x)表示
x
x
x的欧拉函数,若
x
<
y
x<y
x<y,
f
(
x
)
f(x)
f(x)是小于
x
x
x的数中互素的二元组个数
f
(
x
)
=
p
h
i
(
2
)
+
p
h
i
(
3
)
+
.
.
.
+
p
h
i
(
n
)
f(x)=phi(2)+phi(3)+...+phi(n)
f(x)=phi(2)+phi(3)+...+phi(n)
5.判断x/y是否为整数
bool judge(double x,double y) {//判断是否为整数
if (x>(int)x+1e-9) return 1;
if (y>(int)y+1e-9) return 1;
if (x/y>(int)(x/y)+1e-9) return 1;
return 0;
}