简单数学:
写在前面:啥也别说了,背代码吧
#include
#define MAX 11111
//计算因(约)数个数
int cont(int x) {
int cont;
for(int i = 1; i * i <= x; i++) {
if(i * i == x) cont += 1;
else if(x % i == 0) cont += 2;
}
return cont;
}
//补:整数唯一分解定理:每个大于1的自然数都可以写成素数的积,
//而且这些素因子按大小排列后,写法仅一种
//分解素因数(找出上面式子中素数的个数)
int count (int x) {
int count = 0;
for(int i = 2; i * i <= x; i++)//1不是素数
{
if(x % i == 0) count += 1;
while(x % i == 0) x /= i;
}
if(x != 1) count += 1;
return count;
}
//线性筛法:每一个合数都会被它的最小素因子筛掉
//之一:埃拉托斯特尼筛法: 每一个素数会删掉它的所有倍数
int v[MAX],p[MAX];
void linear_sieve(int n) {
int tot = 0;
for(int i = 2; i <= n; i++) {
if(!v[i]) p[++tot] = i;
for(int j = 1; i * p[j] <= n; j++) {
v[i * p[j]] = true;
if(i % p[j] == 0) break;
}
}
}
//最大公约数,欧几里得算法
int gcd(int x, int y) {
if(y == 0) return x;
return (y , x % y);
}
int exgcd(int a, int b, int &x, int &y) //ax+by = gcd(a,b) 可求出一组x,y
{//也可以返回最大公约数
if(b == 0) {
x = 1, y = 0;
return a;
}
int d = exgcd(b , a % b, x, y);
int tmp = x;
x = y;
y = tmp - a / b * y;//原x 减去 b分之a乘以y
return d;
}
int main() {
linear_sieve()
}
// #include
#include
#include
int main() {
scanf("%d",&n);
if(n == g) {
printf(“0”);
return 0;
}
q.push(n),q.push(g);//使起点,终点状态入队
vis[n] = 1;
vis[g] = 2;
ans[n] = 0;
ans[g] = 1;//???
while(!q.empty() ) {
int now ,bnow = q.front() ;
q.pop() ;
}
}