給定n序列an,從序列中選若干個數,使得乘積為完全平方數,有多少種方案。
兩個方案不同僅當選擇的位置不同。方案數對1e9+7取模。
第一行乙個整數n,n<=100000
第二行n個整數表示ai,ai<=70
輸出方案數對1e9+7取模後的值
1 1 1 1
sample input2
42 2 2 2
sample output2
7sample input3136
sample output3
1由線性基的性質,選出最大線性無關組以後,任選不屬於無關組的元素後都能構成合法的方案,因此答案為pow(2,n-m)-1,其中,m為無關組的秩即大小
對於個數而言:3^3*3與3^5*3等價,類似的:
由唯一分解定理n=p1^k1……pm^km,我們預處理出1~70每個數包含的質因數,顯然,若數n含偶數個數質因子p,則p可以忽略,因此我們只用記錄每個數所含有的奇數個的質因子,注意到1~70只有19個質數,直接壓位即可
#includeusing namespace std;
#define inc(i,l,r) for(register int i=(l);i<=(r);++i)
#define red(i,r,l) for(register int i=(r);i>=(l);--i)
#define ll long long
#define mod (int)(1e9+7)
int pri=;//70以內的質數
int n,fac[77];
struct linear_basis
k^=p[i];
} return k>0;
}}xxj;
inline void init() }}
inline ll quick(ll x,int k)
return ans;
}inline void solv()
cout<<(quick(2,n-num)%mod-1)%mod<<"\n";
}int main()
CF374 C 動態規劃
題目看上去感覺像是dijstra,但是不是最短路,而是在實踐允許的範圍內選擇最多的點去走完從1到n的路,這個想到的是動態規劃,以邊為核心,一條邊一條邊的掃過,如果這條邊對應的起點和終點連線上之後,對於從1到終點來說是有利的就加上那種,我還不是很理解,只是把標程看懂自己敲了一遍而已。include u...
CF369C 思維搜尋
附 原題鏈結 題意 給你n個人,以及要進行k輪遊戲,每個人都有一把槍,在每一輪中,每個活著的人都將搶指向在場上編號最小的那個人身上,編號最小的那個人將槍口指向編號次小的那個人身上。現在已知每個人打中的概率,問k輪內,會有幾種存活情況出現。分析 通過分析,可以得知每一種存活狀態僅對應一種被槍口指向的人...
CF 392 2 C 暴力模擬
cf 392 2 c.unfair poll 題意 n行m列人,老師點k次名。點名次序,每一行都是從1到m,但行是按1,2.n 1 n,n 1 n 2 1,2,3.n 1 n.求點完k次名後被點的最多的次數和最少的次數,以及給定的 x,y 被點次數。總結 有點麻煩,但還是很好找規律,只是fst了,有...