令 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位
这种求方程的根的题目,肯定有循环周期的。
这个正弦和余弦的函数显然有一个 π=3.141592653589793238...... 的周期。
然后我假设函数在0~ π 是单调的,然后二分出了一个零点(要把精度开的超大)二分出第一个零点 l=3.1133390914355221...... ,然后不断的加 π 就可以了。
由于三角函数的数学功底不够,不会证明为什么是单调。
#include
#include
#include
#include
#include
#define fo(i,a,b) for(i=a;i<=b;i++)
using namespace std;
int A,B,n,i;
double k,l,t,r,mid,ans,gen;
double doing(double x){
int i;double y=0;
fo(i,1,10000){
y+=A*sin(x+i)/(i+sin(i))+B*cos(x+i)/(i+cos(i));
}
return y;
}
int main(){
scanf("%d%d%d",&A,&B,&n);
/* l=0,r=3.14159265358979323846264;
while(r-l>0.0000000001){
mid=(l+r)/2;
if(doing(mid)<0)l=mid;else r=mid;
}*/
l=3.1133390914355221;
fo(i,1,n){
ans+=l;
l+=3.14159265358979323846264;
}
printf("%.3f\n",ans);
}