86 lines
1.6 KiB
Plaintext
86 lines
1.6 KiB
Plaintext
int func(int i, int j) {
|
|
return ((i+j) * (i+j+1) / 2 + i + 1);
|
|
}
|
|
|
|
float Vectordot(float v[], float u[], int n) {
|
|
int i = 0;
|
|
float sum = 0;
|
|
while (i < n) {
|
|
sum =sum+ v[i] * u[i];
|
|
i=i+1;
|
|
}
|
|
return sum;
|
|
}
|
|
|
|
void mult1(float v[], float out[],int n) {
|
|
int i = 0, j = 0;
|
|
float sum = 0;
|
|
|
|
while (i < n) {
|
|
while (j < n) {
|
|
sum =sum+ v[j] / func(i,j);
|
|
j=j+1;
|
|
}
|
|
out[i] = sum;
|
|
i=i+1;
|
|
}
|
|
}
|
|
|
|
void mult2(float v[], float out[], int n) {
|
|
int i = 0, j = 0;
|
|
float sum = 0;
|
|
|
|
while (i < n) {
|
|
while (j < n) {
|
|
sum =sum+ v[j] / func(j,i);
|
|
j=j+1;
|
|
}
|
|
out[i] = sum;
|
|
i=i+1;
|
|
}
|
|
}
|
|
|
|
|
|
void mult_combin(float v[], float out[], int n, float tmp[]) {
|
|
mult1(v, tmp, n);
|
|
mult2(tmp, out, n);
|
|
}
|
|
|
|
float temp = 1;
|
|
float my_sqrt(float input) {
|
|
while (temp - input / temp > 1e-6 || temp - input / temp < -1e-6){
|
|
temp = (temp+input/temp)/2;
|
|
}
|
|
return temp;
|
|
}
|
|
|
|
int main() {
|
|
int n = 100000;
|
|
if (n <= 0) {
|
|
n = 2000;
|
|
}
|
|
starttime();
|
|
float vectorA[100000], vectorB[100000], Vectortmp[100000];
|
|
|
|
int i;
|
|
while(i < n) {
|
|
vectorA[i] = 1;
|
|
i=i+1;
|
|
}
|
|
i = 0;
|
|
while(i < 1000) {
|
|
mult_combin(vectorA, vectorB, n, Vectortmp);
|
|
mult_combin(vectorB, vectorA, n, Vectortmp);
|
|
i=i+1;
|
|
}
|
|
stoptime();
|
|
float result = my_sqrt(Vectordot(vectorA,vectorB, n) / Vectordot(vectorB,vectorB,n));
|
|
if(result - 1.000000 <= 1e-6 && result - 1.000000 >= -1e-6){
|
|
putint(1);
|
|
}else{
|
|
putint(0);
|
|
}
|
|
putch(10);
|
|
return 0;
|
|
}
|