NC50561. X-factor Chain
描述
输入描述
多组数据,每组数据一行,包含一个正整数x。
输出描述
对于每组数据,输出序列的最大长度以及满足最大长度的序列的个数。
示例1
输入:
2 3 4 10 100
输出:
1 1 1 1 2 1 2 2 4 6
C++14(g++5.4) 解法, 执行用时: 22ms, 内存消耗: 5504K, 提交时间: 2019-08-23 09:15:37
#include<bits/stdc++.h> using namespace std; typedef long long ll; const int N=1200000; int vis[N],prime[N],tot=0; ll fac[35]; void get(){ fac[1]=1; fac[0]=1; for(int i=2;i<=20;i++) fac[i]=fac[i-1]*i; memset(vis,0,sizeof(vis)); for(int i=2;i<=N;i++){ if(!vis[i]) prime[++tot]=i; for(int j=1;j<=tot&&prime[j]*i<=N;j++){ vis[prime[j]*i]=1; if(i%prime[j]==0) break; } } } int main(){ get(); int n; while(~scanf("%d",&n)){ int s1=0; ll s2=1; for(int i=1;i<=tot&&prime[i]*prime[i]<=n;i++){ int cnt=0; if(n==1) break; if(n%prime[i]!=0) continue; while(n%prime[i]==0){ n/=prime[i]; cnt++; } s1+=cnt; s2*=fac[cnt]; } if(n!=1) s1++; printf("%d %lld\n",s1,fac[s1]/s2); } return 0; }
C++11(clang++ 3.9) 解法, 执行用时: 33ms, 内存消耗: 376K, 提交时间: 2020-06-01 23:07:40
#include<bits/stdc++.h> using namespace std; int main() { long long fact[50]={0,1},x; int i; for(i=2;i<=20;i++) { fact[i]=fact[i-1]*i; } while(cin>>x) { long long sum=1,len=0; for(i=2;i*i<=x;i++) { int cnt=0; if(x%i==0) { while(x%i==0) { x/=i; cnt++; } len+=cnt; sum*=fact[cnt]; } } if(x>1) len++; cout<<len<<" "<<fact[len]/sum<<endl; } }
C++(g++ 7.5.0) 解法, 执行用时: 8ms, 内存消耗: 352K, 提交时间: 2022-08-23 19:34:59
#include<cstdio> int main() { for(int x;~scanf("%d",&x);) { int ans=1,c1=0,c2; for(int i=2;i*i<=x;i++)for(c2=0;x%i==0;)ans*=++c1,ans/=++c2,x/=i; if(x>1)ans*=++c1; printf("%d %d\n",c1,ans); } return 0; }