首页 > 代码库 > 分解质因数模板
分解质因数模板
/*==================================================*| 分解质因数,可能有些地方需要改为long long \*==================================================*/ const int MAXN=100010; int prm[MAXN+1]; bool is[MAXN+1]; int getprm(int n){ int i, j, k = 0; int s, e = (int)(sqrt(0.0 + n) + 1); memset(is, 1, sizeof(is)); prm[k++] = 2; is[0] = is[1] = 0; for(i = 4; i < n; i += 2) is[i] = 0; for(i = 3; i < e; i += 2) if(is[i]) { prm[k++] = i; for(s = i * 2, j = i * i; j < n; j += s) is[j] = 0; // 因为j是奇数,所以+奇数i后是偶数,不必处理! } for( ; i < n; i += 2) if(is[i]) prm[k++] = i; return k; // 返回素数的个数 } ll factor[101][2]; int facnt; int div(ll x) { int num=1; facnt=0; ll tmp=x; for(int i=0;prm[i]<=tmp/prm[i];i++) { if(tmp%prm[i] == 0) { factor[facnt][0]=prm[i]; factor[facnt][1]=0; while(tmp%prm[i] == 0) { tmp/=prm[i]; factor[facnt][1]++; } num*=(factor[facnt][1]+1); facnt++; } } if(tmp!=1) { factor[facnt][0]=tmp; factor[facnt++][1]=1; num*=2; } return num; }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。