数值计算

数值计算

基准时间限制:1 秒 空间限制:131072 KB 分值: 80
令 F(x)=wk=1(Ak+sin(k)sin(x+k)+Bk+cos(k)cos(x+k)) 
求F(x)=0的前n小的正根的和。
n<=3e6,A<=1e3,B<=1e3
其中w是定值,为1e4
保留到小数点后3位
Input
三个数 A B n
Output
答案 保留3位小数
Input示例
5 4 1000
Output示例
1572338.870
思路:

把式子整理下然后就行了,F(x)可以最终写成Xsin(x)+Ycos(x)的形式,F(x)=Zsin(x+α),那么-a+pi就是通解。
 1 #include<stdio.h>
 2 #include<algorithm>
 3 #include<iostream>
 4 #include<string.h>
 5 #include<queue>
 6 #include<stack>
 7 #include<math.h>
 8 using namespace std;
 9 typedef long long LL;
10 double pi = 3.14159265358979323846264;
11 int main(void)
12 {
13         double A,B;
14         int n;
15         scanf("%lf %lf %d",&A,&B,&n);
16         int i,j;
17         double sum = 0;
18         double summ = 0;
19         for(i = 1; i <= 10000; i++)
20         {
21                 sum = sum + A*cos(1.0*i)/(i+sin(1.0*i));
22                 sum = sum - B*sin(1.0*i)/(i+cos(1.0*i));
23                 summ = summ + A*sin(1.0*i)/(i+sin(1.0*i));
24                 summ = summ + B*cos(1.0*i)/(i+cos(1.0*i));
25         }
26         double xx = sqrt(sum*sum+summ*summ);
27         double x = 1.0*sum/xx;
28         double y = acos(x);
29         while(y<=0)
30         {
31                 y+=pi;
32         }
33         double ak = y;
34         n--;//printf("%lf
",y);
35         while(n)
36         {
37                 n--;
38                 y+=pi;
39                 ak+=y;
40         }
41         printf("%.3f
",ak);
42         return 0;
43 }

油!油!you@
原文地址:https://www.cnblogs.com/zzuli2sjy/p/5910407.html