题目
Problem Description
给出一个大小为2n的集合X={1,2,3,…,2n-1,2n},问该集合中有趣子集的数目,答案mod1e9+7。
x的有趣子集定义为,该子集中至少有两个数,a和b,b是a的倍数且a是集合中最小的元素。Input
输入一个整数n
1<=n<=1000Output
输出子集数目mod1e9+7的结果
Sample Input
3
Sample Output
47
分析
- 可以直接推出公式(见程序)
程序
#include <cstdio>
#define Ha 1000000007
int ans,n,N;
long long he(int x,int y){
long long ans=1,k=x;
for (; y; y>>=1,k=(k*k)%Ha) if (y&1) ans=(ans*k)%Ha;
return ans;
}
int main(){
scanf("%d",&n);
N=n+n;
for (int a=1; a<=n; a++){
int k=N-a-1;
for (int b=a+a; b<=N; b+=a,k--){
ans+=he(2,k);
ans%=Ha;
}
}
printf("%d",ans);
}