【GDKOI2012模拟02.01】数字(找规律&&数论)
2017-07-15 21:53
323 查看
Description
Solution
首先我们可以发现D(x)=(x−1),就是说D(x)≡x(mod9)所以有x=D(x)+9k
那么A=D(x)x=D(x)(D(x)+9k)=D(x)2+9kD(x)
然后这个的方案数就是(r−D(x)2)9∗D(x),这个很好证明。
但是会有重复。
所以我们要找到满足A=D(x)2+9kD(x)=D(y)2+9lD(y)
的所有解。
把上面的式子转一转D(x)2−D(y)2=9(D(y)l−D(x)k)
所以有D(x)2−D(y)29=D(y)l−D(x)k
所有有解(-1,-1)
因为有解,所以我们还可以得到更多解。
假设ax+by=c的a,b为其中一个解
那么有x(a+bgcd(a,b))+y(b−agcd(a,b))=c
上面(a,b)进行括号内的变换也是一组解,然后用边界除一下就好了。
Code
#include<iostream> #include<stdio.h> #include<string.h> #include<algorithm> #include<math.h> #define fo(i,a,b) for(i=a;i<=b;i++) using namespace std; typedef long long ll; const int maxn=5e6+7; ll i,j,k,l,t,n,m,ans,T,r,x,y,o,a,b,yi,er; ll gcd(ll x,ll y){return(!y)?x:gcd(y,x%y);} int main(){ // freopen("fan.in","r",stdin); for(scanf("%d",&T);T;T--){ scanf("%lld%lld",&l,&r);ans=0; fo(i,1,9){ if(i*i>r)break; ans+=(r-i*i)/9/i+1; x=i,y=9-i;o=gcd(x,y); yi=y/o,er=x/o; if(y*y<=r&&i<=4)ans-=((r-x*x)/9/x+1)/yi; } r=l-1; fo(i,1,9){ if(i*i>r)break; ans-=(r-i*i)/9/i+1; x=i,y=9-i;o=gcd(x,y); yi=y/o,er=x/o; if(y*y<=r&&i<=4)ans+=((r-x*x)/9/x+1)/yi; } printf("%lld\n",ans); } }
相关文章推荐
- 【JZOJ2700】【GDKOI2012模拟02.01】数字
- jzoj2700 【GDKOI2012模拟02.01】数字
- 【GDKOI2012模拟02.01】探险(最短路&&SPFA)
- jzoj2701 【GDKOI2012模拟02.01】矩阵
- 【JZOJ2701】【GDKOI2012模拟02.01】矩阵
- 【GDKOI2012模拟02.01】矩阵
- 【JZOJ2702】【GDKOI2012模拟02.01】探险
- CodeForces - 651A Joysticks (找规律&模拟)水
- ACM: 数学规律题 数论题 hdoj 1021
- BZOJ_P2729[HNOI2012]排队&Codevs_P1994 排队(数论)
- CodeForces - 368C Sereja and Algorithm (找规律&模拟)
- lightoj 1148 - Mad Counting (数学规律&模拟)
- 【ZJOI2012】波浪 &【NOIP2017模拟9.2A组】赤壁情
- 【数论 && 找规律】LightOJ - 1245 Harmonic Number (II)
- 【51nod】--1126 求递推序列的第N项 (数论&&模拟)
- HDU1013 Digital Roots 模拟&数论(我不会数论)
- Eddy's 洗牌问题(规律题+数论)
- JZOJ 3056. 【NOIP2012模拟10.27】数字
- 蓝桥杯 数字游戏 (规律题&&取余)
- 【数论 && 概率论 && 打表找规律】HihoCoder - 1432 JiLi Number