洛谷P3636 曲面
来源:互联网 发布:华语乐坛现状知乎 编辑:程序博客网 时间:2024/05/20 16:09
链接
https://www.luogu.org/problem/show?pid=3636
题解
题目大意:对于所有
看起来很麻烦,我用了很多种方法都不行,最后还是找对了路子。首先如果我们枚举
呃似乎很慢…可以看到对于给定的
这样是
如果令
(这里的
那么这个肯定是
上面是三个数字互不相同,在考虑有两个相同并且和第三个不同的,即
最后考虑
然后
总的时间复杂度是
听说正解是杜教筛啥的,好厉害的样子…我不会
代码
#include <cstdio>#include <algorithm>#define mod 10007ll#define lim 100000000000000000ll#define ll long longusing namespace std;ll inv[100];inline ll f(ll n){return n*(n+1)%mod*(2*n+1)*inv[6]%mod;}inline ll sqr(ll x){return x*x;}inline ll pow(ll a, ll b){ ll ans, t; for(ans=1,t=a;b;b>>=1,t=t*t%mod)if(b&1)ans=ans*t%mod; return ans;}void init(){ ll i; for(i=1;i<=10;i++)inv[i]=pow(i,mod-2)%mod;}ll work(ll N){ ll x, y, ans=0, t; //x<y<z t=0; for(x=1;x*x*x<N;x++) { for(y=x+1;y<N/x/y;y++) { t+=f(x+y+(N/x/y))-f(x+y+y); if(t>lim)t%=mod; } } ans+=t*6%mod; //x=y!=z t=0; for(x=1;x*x<=N;x++) { t=t+f(x+x+N/x/x)-f(x+x); if(x*x*x<=N)t=t-sqr(x+x+x); if(t>lim)t%=mod; } ans+=t*3%mod; //x=y=z t=0; for(x=1;x*x*x<=N;x++) { t+=sqr(x+x+x); if(t>lim)t%=mod; } ans+=t%mod; return ans%mod;}int main(){ ll a, b, ans; scanf("%lld%lld",&a,&b); init(); if(a>b){printf("0");return 0;} ans=work(b)-work(a-1); printf("%lld",(ans*4%mod+mod)%mod); return 0;}
1 0
- 洛谷P3636 曲面
- OpenGL曲面
- 曲面分类
- 曲面分类
- 曲面等值线
- 圆锥曲面
- Coons曲面
- NURBS曲面显示Bezier曲面
- Part11 贝赛尔曲面
- 空间曲面的理解
- gridfitdir法拟合曲面
- 代数曲面画廊
- NURBS曲线与曲面
- opengl曲面贴图
- 剪裁NURBS曲面
- 转载:贝塞尔曲面
- 贝塞尔曲面的绘制
- 曲面重复纹理填充
- 设计模式(单例)
- sqlite 批量插入
- transient关键字
- HDU 1789
- JAVA_Net之大纲~
- 洛谷P3636 曲面
- Android 的线程和线程池
- 自定义命令环境
- hiho一下 第140周 清理海报
- js修改bgcolor
- JavaSE--05--内部类,匿名内部类
- Linux内核分析 函数调用堆栈与mykernel实验基础测试
- Qt容器QVector
- 5-6 简易连连看 (20分)