摘要:C=A*B以C来划分,假设线程数为m,矩阵维度为n*n。那么每个线程计算C的元素个数为n*n/m;/*矩阵并行计算C=A*B --- C(i,j)等于A的第i行乘以第j列*/#include <stdio.h>#include <time.h>#include <stdlib.h>#include <math.h>#include <windows.h>/* 生成n*n矩阵*/void GenerateMatrix(float *m, int n);void PrintMatrix(float *p, int n);void Gene
阅读全文
05 2012 档案
摘要:将整个矩阵分解为这样的小块,每次完成一对小块的计算,以提高Cache的命中率。提示:图中n=N/m计算次序为A11*B11, A11*B12,…, A11*B1n,,由于反复使用A11,因此可以提高Cache的命中率。/*矩阵分开计算C=A*B --- C(i,j)等于A的第i行乘以第j列*/#include <stdio.h>#include <time.h>#include <stdlib.h>#include <math.h>#include <windows.h>/* 生成n*n矩阵*/void GenerateMatrix(
阅读全文
摘要:const对象并不是什么都不可改变的class A {public: int x, y;};class B {public: A *t; int *c, d;};void foo(const B& ob){ //ob.t++; //不合法 //ob.d++; //不合法 ob.t->x++; //合法 *(ob.c) = 3; //合法}在如上代码中const修饰的寓意相当于:A *t 转变成 A* const t;int *c 转变成 int* const c;int d 转变成 const int d;因此ob.t->x++是合法的*(ob.c) ...
阅读全文
摘要:#define N 10int lis[N+1][N+1];int *LIS(int *a){ for (int i=1; i<=N; i++) { lis[i][0]=1; lis[i][1]=a[i]; for (int j=1;j<i; j++) { if (a[i]>lis[j][lis[j][0]]) { lis[j][0]++; lis[j][lis[j][0]] = a[i]; } ...
阅读全文
摘要:N个数中选M个数的组合问题#define N 5#define M 4char answer[N];void Print(char a[], int n){ for (int i=0; i<n; i++) { cout << a[i] << " "; } cout << endl;}void Combination(char a[], int b, int n, int k){ if (k == 0) { Print(answer, M); return; } if (k==n) { ...
阅读全文
摘要:#include <iostream>#include <vector>#include <iterator>#include <algorithm>struct Area { Area():x(0), y(0) {} Area(int a, int b):x(a),y(b){} int x,y; bool operator<(const Area &rhs) { return x<rhs.x; } //排序用到 friend ostream& operator<<(ostream &out, co
阅读全文
摘要:题目:p215 寻找不能被[2,31]中连续两个数整除,但能被其它数整除的数long long GCD(long long a, long long b){ if (b == 0) return a; return GCD(b, a%b);}long long LCM(long long a, long long b){ return a*b/GCD(a,b);}long long FindNumber(){ long long lcm=2; for (int j=2; j<31; j++) { lcm=1; for...
阅读全文
摘要:对于一个正整数,输出它所有可能的连续自然数之和的算式1+2=34+5=92+3+4=9根据题意,有:s+(s+1)+(s+2)+...+(s+k) = n(k+1)s + (k+1)k/2 = n(k+1)(2s+k)=2ns = (2n/(k+1)-k)/2因为 s, k都是整数,所以应满足2n%(k+1)==0 && (2n/(k+1)-k)%2==0void Print(int n, int s, int k){ printf("%d=",n); for (int i=s; i<=s+k; i++) { if (i==s) print...
阅读全文

浙公网安备 33010602011771号