首页 > 代码库 > hdu 1299 数论 分解素因子

hdu 1299 数论 分解素因子

题意:求1、1/x+1/y=1/z  给定z 求x,y的个数
zsd:
1: 要知道这个素数的因子的范围 范围为2——sqrt(n);
2:

带入方程得:x = n * n / k + n ;

现在就变成了求x的值。又因为n一定大于k,所以转换成求n * n的分解数;

因为n = p1 ^ e1 * p2 ^ e2 *..........*pn ^ en

sum ( n)= ( 1 + e1 ) * ( 1 +e2 ) * .........* ( 1 +en );

sum (n * n) = ( 1 + e1 ) * (1 + e2 ) *......* ( 1 + en ) ;



#include<iostream> #include<cstring> using namespace std; # define N 40003 int a[N]; int main() { int i,j; memset(a,0,sizeof(a)); for(i=2;i<N;i++) if(a[i]==0) { for(j=i+i;j<N;j+=i) a[j]=1; } int t; int n; cin>>t; int T=1; for(T=1;T<=t;T++) { cin>>n; int sum=1; for(i=2;i<=N;i++) { if(a[i]) continue; if(n%i!=0) continue; if(n==1) break; int c=0; while(n%i==0) { n=n/i; c++; } if(c>0) sum*=(2*c+1); } if(n!=1) sum*=3; cout<<"Scenario #"<<T<<":"<<endl; cout<<sum/2+1<<endl<<endl; } return 0; }