给定长为n的序列a,$a_i$的元素均为$[0,10^9]$内的整数。计算
$\sum_{i=1}^n[i \equiv 1(mod2)] \sum _{1 \leq j\leq n}^{i|j} a_j$
对$10^9+7$取模后的值。其中[P]当命题P为真时值为1,否则值为0。
#include<cstdio>
#include <vector>
const int mod=1e9+7;
std::vector <int>vec;
inline int inc(int x,int y)
{ x+=y-mod;return x+(x>>31 & mod);}
inline int mul(int x,int y) {return 1ll*x*y%mod;}
int main()
{
int n;
scanf ("%d",&n);
vec.push_back(0);
for (int i=1;i<=n;++i)
{
int x;
scanf ("%d",&x) ;
vec.push_back(x);
}
int ans=0;
for (int i=1;i<=n;++i)
if(i&1)
for (int j=i;j<=n;j+=i)
ans=inc(ans,mul(vec[i],vec[j]));
printf ("%d\n",ans);
return 0;
}
判断题
1) (1分) vec.push_back(x)的含义为向容器vec的尾部插入元素x。( )
2) (1分) 对于0≤i≤2^31-1,语句 i&1 的含义与i mod 2等价。( )
3) 该程序需要注意运算时可能超出int类型所能容纳的最大数据的风险。( )
4) inc(x,y)的含义为返回(x+y) mod(10*+7)的值(0<=x,y<10^9+7)。( )
选择题
5) (3分)该算法的时间复杂度为( )。
6) 下列说法错误的是( )。