pku2992 Divisors
2012-07-10 19:35
190 查看
#include<iostream> #include<vector> #include<algorithm> #include<cstdio> #include<queue> #include<stack> #include<string> #include<map> #include<set> #include<cmath> #include<cassert> #include<cstring> #include<iomanip> using namespace std; #ifdef _WIN32 #define i64 __int64 #define out64 "%I64d\n" #define in64 "%I64d" #else #define i64 long long #define out64 "%lld\n" #define in64 "%lld" #endif /************ for topcoder by zz1215 *******************/ #define FOR(i,a,b) for( int i = (a) ; i <= (b) ; i ++) #define FFF(i,a) for( int i = 0 ; i < (a) ; i ++) #define FFD(i,a,b) for( int i = (a) ; i >= (b) ; i --) #define S64(a) scanf(in64,&a) #define SS(a) scanf("%d",&a) #define LL(a) ((a)<<1) #define RR(a) (((a)<<1)+1) #define pb push_back #define CL(Q) while(!Q.empty())Q.pop() #define MM(name,what) memset(name,what,sizeof(name)) #define read freopen("in.txt","r",stdin) #define write freopen("out.txt","w",stdout) const int inf = 0x3f3f3f3f; const i64 inf64 = 0x3f3f3f3f3f3f3f3fLL; const double oo = 10e9; const double eps = 10e-9; const double pi = acos(-1.0); const int maxn = 500; // i64 gcd(i64 a,i64 b){return b?gcd(b,a%b):a;} i64 gcd(i64 _a, i64 _b) { if (!_a || !_b) { return max(_a, _b); } i64 _t; while ((_t = _a % _b)) { _a = _b; _b = _t; } return _b; } i64 ext_gcd (i64 _a, i64 _b, i64 &_x, i64 &_y) { if (!_b) { _x = 1; _y = 0; return _a; } i64 _d = ext_gcd (_b, _a % _b, _x, _y); i64 _t = _x; _x = _y; _y = _t - _a / _b * _y; return _d; } i64 invmod (i64 _a, i64 _p) { i64 _ans, _y; ext_gcd (_a, _p, _ans, _y); _ans < 0 ? _ans += _p : 0; return _ans; } vector<int>p; vector<int>g[maxn]; int n,k; bool isp(int x) { for(int i=0;p[i]*p[i]<=x;i++) { if(x%p[i] == 0) { return false; } } return true; } void init() { p.clear(); p.pb(2); for(int i=3;i<100000;i++) { if(isp(i)) { p.pb(i); } } for(int i=0;i<maxn;i++) { g[i].clear(); } int temp; for(int i=2;i<maxn;i++) { temp = i; for(int u=0;p[u]*p[u]<=temp;u++) { while(temp%p[u]==0) { temp/=p[u]; g[i].pb(p[u]); } } if(temp>1) { g[i].pb(temp); } } return ; } int s[maxn]; int dp[maxn][maxn]; int main() { init(); MM(dp,0); for(int u=2;u<maxn;u++) { for(int i=1;i<maxn;i++) { dp[u][i] = dp[u-1][i]; } for(int i=0;i<g[u].size();i++) { dp[u][g[u][i]]++; } } while(scanf("%d%d",&n,&k)!=EOF) { i64 ans=1; for(int i=1;i<=n;i++) { s[i] = dp [i]; } for(int i=1;i<=n;i++) { s[i] -= dp[n-k][i]; } for(int i=1;i<=n;i++) { s[i] -= dp[k][i]; } for(int i=2;i<=n;i++) { ans *= s[i]+1; } printf("%lld\n",ans); } return 0; }
相关文章推荐
- pku2992 Divisors
- Divisors pku 2992
- poj 2992 Divisors (素数打表+阶乘因子求解)
- poj 2992 Divisors 整数分解
- POJ 2992 Divisors(求组合数因子个数)
- 质因数计数公式 POJ 2992 Divisors
- 2992 Divisors 求C(N,K)的因子个数
- POJ 2992 Divisors 求组合数因子个数
- POJ 2992 Divisors[组合数 因子个数]
- POJ_2992_Divisors(组合数的因子数)
- POJ-2992 Divisors
- poj 2992 Divisors——数论
- poj 2992 Divisors
- poj - 2992 - Divisors
- POJ 2992 Divisors 解题报告(素因子统计)
- poj 2992 Divisors
- poj 2992 Divisors(求因子个数)
- POJ 2992 Divisors 求一个数的因数的个数
- POJ 2992 Divisors(阶乘的素因子分解)
- POJ 2992 Divisors (因子个数)