라그랑쥬 보간법 프로그램인데 오류나요 ㅠㅠ
그댸와나
안녕하세요 fib입니다
지난번에 최소공배수 알고리즘 어쩌고 저쩌고 해서 질문한 내용들을 가지고 프로그램을 만들었는데
프로그램의 오류는 아닌데 계산을 잘못해서 나와요 ㅜㅜ
문제는 이겁니다
n+1개의 직교좌표계의 점을 입력받으면 그 점들을 모두 지나는 n차 이하의 방정식을 출력하는 프로그램
입력양식
첫째 줄에 n을 입력받는다둘째 줄부터 n+2번째 줄까지 x_i, y_i를 입력한다
출력양식
f(x) = + a/b x^p + .... 이런모양
입력예시 (input.txt)
2-1 10 01 1
출력예시 (output.txt)
f(x) = +1/1 x^2#includestdio.hFILE*in=fopen(input.txt,r);FILE*out=fopen(output.txt,w);inta[1000],v[1000][1000],d[1000],e[1000];intGCD(inta,intb){if(a=b){
if(a%b==0)returnb;elsereturnGCD(b,a%b);}elsereturnGCD(b,&;GCD(b,a);}intmain(){intn,i,l=-1,j,k,lcm=1,c=0,g,s,m;boolp=false;fscanf(in,%d,&n);for(i=0;i=n;i++)fscanf(in,%d%d,&a[i],&v[i][0]);for(i=0;i=n;i++){a[i]*=-1;for(j=0;j=n;j++){if(i==j){l++;continue;}for(k=l;k=0;k--)v[j][k+1]+=v[j][k]*a[i];}d[i]=1;e[i]=1;for(j=0;ji;j++){d[i]*=a[i]-a[j];d[j]*=a[j]-a[i];}e[i]=d[i];}i=2;do{for(j=0;j=n;j++){if(d[j]%i==0&&d[j]!=0){if(!p){p=true;lcm*=i;}d[j]/=i;}}if(p)p=false;elsei++;while(d[c]==1||d[c]==-1||d[c]==0){c++;if(cn)break;}}while(c=n);fprintf(out,f(x)=);for(i=0;i=n;i++){s=0;m=0;for(j=0;j=n;j++)s+=v[j][i]*lcm/e[i];if(s0)l=s;elseif(s0)l=-s;if(s==0)continue;g=GCD(lcm,l);s/=g;m=lcm/g;fprintf(out,+%d/%dx^%d,s,m,n-i);}fcloseall();return0;}