POJ 3421(X-factor Chains)素數
阿新 • • 發佈:2019-01-26
題意:輸入1個X,求解序列1,a0,a1,a2......am(am=X),其中滿足任意i(ai%ai-1==0),求解最大的m和滿足的序列個數
求解X的質因子個數即為m,再算出所有質因子的全排列個數。
n=4時,質因子{2,2},m為2,全排列只有一種
#include<iostream> #include<algorithm> #include<stdio.h> #include<cmath> #include<vector> #include<cstring> #define LL long long using namespace std; #define N 1100000 int a[1100000]; void is_sushu() { memset(a,0,sizeof(a));//對陣列a進行初始化為0,不是素數的標記為1,剩下為0的就是素數了 a[1]=1;//1既不是素數也不是合數,先標記為0 for(int i=2; i<=sqrt(N); i++) { if(a[i]==0)//如果i是素數 { for(int j=2; j*i<=N; j++) //迴圈標記的範圍是i*j<N { a[i*j]=1;//如果i是素數,那麼i*j肯定不是素數 } } }//最終所有非素數都標記為1,素數都標記為0 } //vector<int>v; int b[N]; int main() { is_sushu(); int n; while(cin>>n) { // v.clear(); int k=0; for(int i=2;i<=n;i++) { if(a[i]==0) while(n%i==0) { //int num=i; //v.push_back(num); b[k++]=i; n/=i; } } cout<<k<<' '; sort(b,b+k); int cnt=0; do { cnt++; }while(next_permutation(b,b+k)); cout<<cnt<<endl; } return 0; }