POJ 3604 Professor Ben 数论
2012-08-03 09:53
162 查看
转载请注明出处,谢谢 http://blog.csdn.net/ACM_cxlove?viewmode=contents
by---cxlove
题意:给出一个N,有若干的因子,求出因子的因子个数立方和。
首先N的范围也是比较大的,求一次因子个数很简单,但是要绕两次显得没有头绪。
将N进行分解,N=p1^a1*p2^a2*……pn^an,则可以得到N有M个因子M=(1+a1)*(1+a2)*(1+a3)……(1+an);
貌似这步在这题中没有用。
对于每个N的因子,只是对于每一个质因子取出若干个bki(0=<bki<=ai),所有情况列出来
N1=p1^b11*p2^b12……pn^b1n; 对于N1这个因子,因子个数为(1+b11)*(1+b12)*(1+b13)……(1+b1n)
……
……
Nm=p1^bm1*p2^bm2……pn^bmn; 对于N1这个因子,因子个数为(1+bm1)*(1+bm2)*(1+bm3)……(1+bmn)
将所有的立方然后加起来,进行整理
(1^3+2^3+……(1+a1)^3)*(1^3+2^3+……(1+a2)^3)*……(1^3+2^3+……(1+an)^3)
对于N进行因式分解之后,求出a1……an,剩下的就是求立方和。
1^3+2^3……+n^3=(n*n*(n+1)*(n+1))/4;问题解决
by---cxlove
题意:给出一个N,有若干的因子,求出因子的因子个数立方和。
首先N的范围也是比较大的,求一次因子个数很简单,但是要绕两次显得没有头绪。
将N进行分解,N=p1^a1*p2^a2*……pn^an,则可以得到N有M个因子M=(1+a1)*(1+a2)*(1+a3)……(1+an);
貌似这步在这题中没有用。
对于每个N的因子,只是对于每一个质因子取出若干个bki(0=<bki<=ai),所有情况列出来
N1=p1^b11*p2^b12……pn^b1n; 对于N1这个因子,因子个数为(1+b11)*(1+b12)*(1+b13)……(1+b1n)
……
……
Nm=p1^bm1*p2^bm2……pn^bmn; 对于N1这个因子,因子个数为(1+bm1)*(1+bm2)*(1+bm3)……(1+bmn)
将所有的立方然后加起来,进行整理
(1^3+2^3+……(1+a1)^3)*(1^3+2^3+……(1+a2)^3)*……(1^3+2^3+……(1+an)^3)
对于N进行因式分解之后,求出a1……an,剩下的就是求立方和。
1^3+2^3……+n^3=(n*n*(n+1)*(n+1))/4;问题解决
#include<iostream> #include<cstring> #include<queue> #include<cstdio> #include<cmath> #include<algorithm> #define N 100005 #define inf 1<<30 #define MOD 9973 #define LL long long #define eps 1e-7 #define zero(a) fabs(a)<eps #define equal(a,b) zero(a-b) using namespace std; bool flag[10005]; int prime[10005],cnt=0; int fac[1005],tot; void Prime(){ for(int i=2;i<=3000;i++){ if(flag[i]) continue; prime[cnt++]=i; for(int j=2;j*i<=3000;j++) flag[i*j]=true; } } //求1^3+2^3……k^3 LL slove(int k){ int a=k,b=k+1; if(!(a&1)) a/=2; else b/=2; return (LL)a*a*b*b; } int main(){ int t,n; Prime(); scanf("%d",&t); while(t--){ scanf("%d",&n); tot=0; for(int i=0;i<cnt&&prime[i]<=n;i++) if(n%prime[i]==0){ fac[tot]=0; while(n%prime[i]==0){ fac[tot]++; n/=prime[i]; } tot++; } if(n>1) fac[tot++]=1; LL ans=1; for(int i=0;i<tot;i++) ans*=slove(fac[i]+1); printf("%lld\n",ans); } return 0; }
相关文章推荐
- poj 3604 Professor Ben 因子
- POJ 3604 Professor Ben
- poj 3604 Professor Ben
- poj 3604 Professor Ben 组合计数
- POJ 3604 Professor Ben
- poj 3604 Professor Ben
- poj 3604 Professor Ben(质因数分解)
- poj-3604(数论+推导)
- POJ 3604 Professor Ben(合数唯一分解,筛法素数表)
- (Relax 数论1.14)POJ 26889 Prime Distance(区间筛素数:求一个区间L\U中距离最近的两个素数和距离最远的两个素数)
- (Relax 数论1.21)POJ 3258 River Hopscotch
- Uva16009 POJ 1906 Three Powers 数论 玄学找规律题 高精
- poj 2992 Divisors——数论
- poj1845--Sumdiv(数论篇3--真滴是数论啊。。。。)
- poj 2417 Discrete Logging 数论baby_step,giant_step算法
- poj 1930 Dead Fraction 混循环小数化分数 数论
- POJ 2909 && HDU 1397 Goldbach's Conjecture(数论)
- POJ 1019 Number Sequence【数论】
- POJ 2917 Diophantus of Alexandria ★(数论)
- poj1032 数论