简单组合求助
查看原帖
简单组合求助
556366
FFTotoro楼主2023/6/19 20:31

RT,这题就是第二类斯特林数板子(直接套通项公式),但为什么我 WA #1?

代码在这里:

#include<bits/stdc++.h>
#define int long long
using namespace std;
bitset<10000001> b;
vector<int> p;
int f(int n,int m){
  int c=0;
  for(int i=0;i<=m;i++){
    int s=1;
    for(int j=1;j<=n;j++)s*=i;
    for(int j=2;j<=i;j++)s/=j;
    for(int j=2;j<=m-i;j++)s/=j;
    if(m-i&1)c-=s;
    else c+=s;
  }
  return c;
}
main(){
  ios::sync_with_stdio(false);
  cin.tie(0); cout.tie(0);
  for(int i=2;i<1e7;i++){
    if(!b[i])p.emplace_back(i);
    for(int j:p){
      if(i*j>1e7)break;
      b[i*j]=true;
      if(!(i%j))break;
    }
  }
  int t; cin>>t;
  while(t--){
    int n,k,c=0; cin>>n>>k;
    for(int i:p){
      if(i*i>n)break;
      if(!(n%i))c++;
      while(!(n%i))n/=i;
    }
    if(n>1)c++;
    if(k>c)cout<<"0\n";
    else cout<<f(c,k)<<'\n';
  }
  return 0;
}
2023/6/19 20:31
加载中...