題意:spa
給你一個n(1e5)q(1e5)表示n個數的數列,q個詢問,每次詢問給你l(n),r(n),s(1023),code
s表示一個二進制數列,當前位爲1表示對應的這個位上的數出現,好比5表示101,即1和3出現,blog
l,r表示一段區間,這段區間中的每一個數,只要能整除出現的數中的任意一個,就會對答案有1的貢獻。class
問每一個詢問的貢獻。二進制
思路:查詢
因爲出現了1就確定每一個數都有貢獻(都是1的倍數),而後就能夠少一位,用512表示9位出不出現的全部狀況,di
用n*512的複雜度預處理全部的狀況,O(1)查詢。co
for(int j=2;j<=10;j++) if(x%j==0) s=s|(1<<(j-2)); for(int j=0;j<512;j++) sum[j][i]=sum[j][i-1]+((s&j)?1:0);