简单数学:
写在前面:啥也别说了,背代码吧 #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 using namespace std; const int max = 3; queue q; map<int,int> vis;//用来标记状态(整个图的) map<int,int> ans;//步数 (整个图的) int n, g = 123804765,fx,fy,nx,ny;//g为目标状态 int a[4][4];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() ;}
}