不是VIP会员,不能显示答案

题目解答

题目:
给定长为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) 下列说法错误的是( )。
考点:
分析:
解答:
评论:
老师: