codeforces895c Square Subsets
time limit per test
4 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output
Petya was late for the lesson too. The teacher gave him an additional task. For some array a Petya should find the number of different ways to select non-empty subset of elements from it in such a way that their product is equal to a square of some integer.
Two ways are considered different if sets of indexes of elements chosen by these ways are different.
Since the answer can be very large, you should find the answer modulo 109 + 7.
Input
First line contains one integer n (1 ≤ n ≤ 105) — the number of elements in the array.
Second line contains n integers ai (1 ≤ ai ≤ 70) — the elements of the array.
Output
Print one integer — the number of different ways to choose some elements so that their product is a square of a certain integer modulo 109 + 7.
Examples
input
Copy
4
1 1 1 1
output
15
input
Copy
4
2 2 2 2
output
7
input
Copy
5
1 2 4 5 8
output
7
Note
In first sample product of elements chosen by any way is 1 and 1 = 12. So the answer is 24 - 1 = 15.
In second sample there are six different ways to choose elements so that their product is 4, and only one way so that their product is 16. So the answer is 6 + 1 = 7.
제목: 몇 개의 수를 제시하고 몇 개의 비공자 집합이 곱셈을 제곱수로 하는지 물어본다.
ai는 매우 작고 70 이내의 질수는 19개이기 때문에 우리는 상압 dp를 진행한다.각 수의 각 질적 인자의 개수를 미리 처리한 다음에 짝을 나누어 옮기면 된다.만약 숫자 하나가 나타나지 않았다면 바로 무시할 것이다.
짝수 번은 질인자에 영향을 주지 않으며, 홀수는 이것에 영향을 미치므로, 이질적이거나 이질적이다.
그리고 2^(cnti-1)를 곱하면 크기마다 어떻게 선택하는지 알 수 있습니다.
코드:
#include
using namespace std;
#define ll long long
int n,a[100005],cnt[75],dp[75][(1<<19)+5],s[75],prime[19]={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67},pow[100005]={1};
int main()
{
dp[0][0]=1;
for(int i=1,t=i;i<=70;i++,t=i)
for(int j=0;j<19;j++)
while(t%prime[j]==0)
t/=prime[j],s[i]^=(1<>n;
for(int i=1;i<=n;i++)cin>>a[i],cnt[a[i]]++;
for(int i=1;i<=70;i++)
{
if(!cnt[i]) for(int j=0;j
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【경쟁 프로 전형적인 90문】008의 해설(python)의 해설 기사입니다. 해설의 이미지를 봐도 모르는 (이해력이 부족한) 것이 많이 있었으므로, 나중에 다시 풀었을 때에 확인할 수 있도록 정리했습니다. ※순차적으로, 모든 문제의 해설 기사를 들어갈 예정입니다. 문자열...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.