Notice: Undefined index: name in /usr/www/lib/views/home/viewtitle.html on line 188
-阅读程序 第 17 题
# include <cmath>
# include <cstring>
# include <iostream>

const int MAXN =1000000;
int n;
int f1[MAXN], f2[MAXN],f3[MAXN];

int calc_f1(int x) {
	int ans=1;
	int maxNum = sqrt(x);
	for (int i= 2; i<= maxNum; ++i)
		if(x%i==0) {
			ans=-ans;
			x/=i;
			if (x%i== 0)
				return 0;
		}
	if(x!=1)
		ans =-ans;
	return ans;
}

int calc_f2(int x) {
	return x;
}

void convolute( ) {
	memset(f3, 0, sizeof(f3));
	for (int i = 1; i<= n; ++i)
		for (int j= 1; j<= n/i; ++j)
			if(i*j<=n)
				f3[i*j]= f3[i* i]+ f1[i]*f2[j];
}
int main() {
	scanf("%d", &n);
	for (int i= 1; i<= n; ++i)
		f1[i] = calc_f1(i);
	for (int i= 1; i<= n; ++i)
		f2[i] - calc_f2(i);
	convolute();
	printf("% d\backslashn", f3[n]);
	return 0;
}
注:本题中你只需要考虑数组越界这一种未定义行为。
● 判断题
第 1 题 若将程序第31行的 n/i 改为n后运行,且已知程序可以安全地运行至第36行而不发生任何未定义行为,则程序依旧可以正常输出正确的答案。( )
第 2 题 去掉程序第3行,程序依然可以正常编译。()
● 单选题
第 3 题 该程序中,第30~33行运行的时间复杂度为( )。
第 4 题 若输入3,程序的输出为( )。
第 5 题 若输入1003,程序的输出为( )。
第 6 题 若输入1000000,程序输出为( )。

解答部分以后会开放。