Thanks
Posted: Wed Jan 30, 2008 6:06 am


Code: Select all
#include <iostream.h>
#include "math.h"
typedef struct
{
int prime;
int num;
}Prime;
bool IfPrime (int n)
{
int limit;
if (n == 2)
return true;
if (n % 2 == 0)
return false;
limit = sqrt (n) + 1;
for (int i = 3; i < limit; i = i + 2)
if (n % i == 0)
return false;
return true;
}
int main ()
{
int n, m;
int i, j, temp;
long long result;
Prime p[6544];
int pNum = 0;
for (i = 0; i <= 65536; i++)
if (IfPrime (i))
p[pNum++].prime = i;
while (cin>>n>>m && n||m)
{
result = 1;
for (i = 1; i < 6544; i++)
p[i].num = 0;
for (i = 2; i <= n; i++)
{
temp = i;
for (j = 1; temp != 1; j++)
{
while (temp % p[j].prime == 0)
{
p[j].num++;
temp = temp / p[j].prime;
}
}
}
for (i = 2; i <= m; i++)
{
temp = i;
for (j = 1; temp != 1; j++)
{
while (temp % p[j].prime == 0)
{
p[j].num--;
temp = temp / p[j].prime;
}
}
}
for (i = 2; i <= n - m; i++)
{
temp = i;
for (j = 1; temp != 1; j++)
{
while (temp % p[j].prime == 0)
{
p[j].num--;
temp = temp / p[j].prime;
}
}
}
for (i = 1; i < 26; i++)
{
for (j = 0; j < p[i].num; j++)
result *= p[i].prime;
}
cout<<result<<endl;
}
return 0;
}
Code: Select all
110 6
Code: Select all
110 * 109 * 108 * 107 * 106 * 105
-------------------------------------------
6 * 5 * 4 * 3 * 2 * 1
Code: Select all
#include <iostream>
#include <vector>
using namespace std;
int gcd (int u, int v)
{
int t;
while (u>0)
{
if (u<v) {t=u;u=v;v=t;}
u=u-v;
}
return v;
}
int main ()
{
long long double n,m,r,h;
bool first=true;
vector <int> n1,m1;
while (cin>>n>>m)
{
if (n==0 && m==0) break;
if (!first) cout<<endl; else first=false;
r=1;
n1.clear();
m1.clear();
for (int i=n-m+1;i<n+1;i++)
{n1.push_back(i);}
for (int i=2;i<m+1;i++)
{m1.push_back(i);}
for (int i=0;i<n1.size();i++)
{
for (int j=0;j<m1.size();j++)
{
h=gcd(n1[i],m1[j]);
if (n1[i]>1 && m1[j]>1 && h>1)
{
n1[i]/=h;m1[j]/=h;
}
}
}
for (int i=0;i<n1.size();i++) {r*=n1[i];}
cout<<r<<endl;
}
return 0;
}
Code: Select all
#include<iostream>
using namespace std;
int main()
{
int n,m,maior;
double numerador,denominador, res;
long long c;
cin >> n >> m;
while( n != 0 && m != 0)
{
numerador = denominador = res =1;
c = 0;
maior = max(m,n-m);
for(numerador = n, denominador = n - maior; numerador > maior; numerador--,denominador--)
{
res = res * (numerador/denominador);
}
cout << n <<" things taken "<< m << " at a time is " << (long long)res << " exactly."<< endl;
cin >> n >> m;
}
return 0;
}
Code: Select all
#include<iostream>
#include<stdio.h>
using namespace std;
int main()
{
long double y,d,k,n;
while((scanf("%lf %lf",&n,&k))==2 && n>=1&& k>=0 && k<=n)
{
d=1;
for( y=0;y<=k-1;y++)
d*=(n-y)/(k-y);
printf("%.lf\n",d);
}
return 0;
}
Code: Select all
#include<iostream>
using namespace std;
int main()
{
long double y,d,k,n;
while((scanf("%lf %lf",&n,&k))==2 && n>=1&& k>=0 && k<=n)
{
d=1;
for( y=0;y<=k-1;y++)
d*=(n-y)/(k-y);
printf("%.lf\n",d);
}
return 0;
}
Code: Select all
printf("%.lf\n",d);
Code: Select all
printf("%.llf\n",d);
And i think this won't be enough to solve this problem