日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

jzoj2700-数字【数论,LCM】

發布時間:2023/12/3 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 jzoj2700-数字【数论,LCM】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

正題

luogu題目鏈接:https://www.luogu.org/problemnew/show/P4193


題目大意

定義一個函數D(x)D(x)D(x)S(x)S(x)S(x)S(x)S(x)S(x)表示xxx的各位之和
D(n)={D(S(n)),S≥10S(n)D(n)=\left\{\begin{matrix} \\D(S(n)),S\geq 10 \\S(n) \\ \\ \end{matrix}\right.D(n)=????????D(S(n)),S10S(n)?
L~RL\sim RLR之間有多個xxx滿足x=D(k)?kx=D(k)*kx=D(k)?k


解題思路

因為(n?S(n))mod9=0(n-S(n))\ mod\ 9=0(n?S(n))?mod?9=0,所以D(n)=(n?1)mod9+1D(n)=(n-1)\ mod\ 9+1D(n)=(n?1)?mod?9+1
22680modx=0(x∈[1..9])22680\ mod\ x=0(x\in [1..9])22680?mod?x=0(x[1..9])
若一個數n=D(k)?kn=D(k)*kn=D(k)?k,那么n+22680=(k+22680D(k))?D(k)n+22680=(k+\frac{22680}{D(k)})*D(k)n+22680=(k+D(k)22680?)?D(k)
證明:

(k+22680D(k))?D(k)?k?D(k)=22680(k+\frac{22680}{D(k)})*D(k)-k*D(k)=22680(k+D(k)22680?)?D(k)?k?D(k)=22680
(k+22680D(k)?k)?D(k)=22680(k+\frac{22680}{D(k)}-k)*D(k)=22680(k+D(k)22680??k)?D(k)=22680
(k+22680D(k)?k)?D(k)=22680(k+\frac{22680}{D(k)}-k)*D(k)=22680(k+D(k)22680??k)?D(k)=22680
k?D(k)+22680?k?D(k)=22680k*D(k)+22680-k*D(k)=22680k?D(k)+22680?k?D(k)=22680
22680=2268022680=2268022680=22680
證畢

然后之間根據循環節預處理1~226801\sim 22680122680的就好了


codecodecode

#include<cstdio> #define LCM 22680 #define ll long long using namespace std; ll n,f[1000000],ans; ll D(ll x) {return (x-1)%9+1;} ll ask(ll x)//1~x的個數 {return x/LCM*ans+f[x%LCM];} int main() {scanf("%lld",&n);for(ll i=1;i<=LCM;i++)//預處理{for(ll j=1;j<=9;j++)if(D(i/j)==j&&i%j==0){f[i]=1;ans++;break;}f[i]+=f[i-1];}while(n--){ll l,r;scanf("%lld%lld",&l,&r);printf("%lld\n",ask(r)-ask(l-1));} }

總結

以上是生活随笔為你收集整理的jzoj2700-数字【数论,LCM】的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。