33,008
社区成员
发帖
与我相关
我的任务
分享
#include <iostream>
using namespace std;
#define MAX_LEN 100
long long f[MAX_LEN][MAX_LEN];
int main()
{
int m, n;
while(cin>>m>>n, m!=0&&n!=0)
{
//dp求解, f[i][j] = f[i-1][j] + f[i][j-1]
for(int i = 0; i <= m; i++)
f[i][0] = 1;
for(int j = 0; j <= n; j++)
f[0][j] = 1;
for(int i = 1; i <= m; i++)
{
for(int j = 1; j <= n; j++)
{
f[i][j] = f[i - 1][j] + f[i][j-1];
}
}
cout<<f[m][n]<<endl;
long long result = 1; //迭代求C(m+n,n),数值很大时有误差
for(int i = 1; i <=n; i++)
{
result *= 1.0*(n+m-i+1)/i;
}
cout<<result<<endl;
}
}
static void Main(string[] args)
{
var sw = Stopwatch.StartNew();
var sum = GetTheSumOfConsecutivePrime(979);
var conditions = new[]
{
GetTheSumOfConsecutivePrime(3).GetEnumerator(),
GetTheSumOfConsecutivePrime(17).GetEnumerator(),
GetTheSumOfConsecutivePrime(45).GetEnumerator(),
};
foreach (var value in sum)
{
if (IsPrime(value) && IsMatch(value, conditions))
{
sw.Stop();
Console.WriteLine(value);
Console.WriteLine("Time:{0}ms", sw.ElapsedMilliseconds);
Console.ReadLine();
return;
}
}
}
static bool IsMatch(int value, IEnumerator<int>[] conditions)
{
for (int i = 0; i < conditions.Length; i++)
{
while (true)
{
if (conditions[i].Current < value)
{
conditions[i].MoveNext();
continue;
}
if (conditions[i].Current > value)
return false;
break;
}
}
return true;
}
static IEnumerable<int> GetTheSumOfConsecutivePrime(int count)
{
Queue<int> queue = new Queue<int>(count);
IEnumerator<int> primes = GetPrimes().GetEnumerator();
int sum = 0;
for (int i = 0; i < count; i++)
{
primes.MoveNext();
queue.Enqueue(primes.Current);
sum += primes.Current;
}
yield return sum;
while (true)
{
sum -= queue.Dequeue();
primes.MoveNext();
queue.Enqueue(primes.Current);
sum += primes.Current;
yield return sum;
}
}
static IEnumerable<int> GetPrimes()
{
yield return 2;
yield return 3;
int value = 5;
while (true)
{
if (IsPrimeWithoutTestTwoOrThree(value))
yield return value;
value += 2;
if (IsPrimeWithoutTestTwoOrThree(value))
yield return value;
value += 4;
}
}
static bool IsPrime(int value)
{
return value % 2 != 0 && value % 3 != 0 && IsPrimeWithoutTestTwoOrThree(value);
}
static bool IsPrimeWithoutTestTwoOrThree(int value)
{
int max = (int)Math.Sqrt(value) + 1;
int i = 5;
while (i < max)
{
if (value % i == 0)
return false;
i += 2;
if (value % i == 0)
return false;
i += 4;
}
return true;
}
#include <vector>
#include <iostream>
int func(int n,int m) {
assert(n>0 && m>0);
if (n==1 || m==1) return 1;
typedef std::vector<std::vector<int> > MATRIX;
MATRIX matrix(n+1,std::vector<int>(m+1));
for (int i=1;i<=n;i++)
matrix[i][1]=1;
for (int i=1;i<=m;i++)
matrix[1][i]=1;
for (int i=2;i<=n;i++)
for (int j=2;j<=m;j++)
matrix[i][j] = matrix[i-1][j]+matrix[i][j-1];
return matrix[n][m];
}
int main(){
std::cout<<func(30,35)<<std::endl;
}