#M9024. 初等数论
初等数论
当前没有测试数据。
- 完善程序:
(哥德巴赫猜想)哥德巴赫猜想是指,任一大于2的偶数都可写成两个质数之和。迄今为止,这仍然是一个著名的世界难题,被誉为数学王冠上的明珠。试编写程序,验证任一大于2且不超过n的偶数都能写成两个质数之和。
若输入n为2010,则输出[ ⑤ ]时表示验证成功,即大于2且不超过2010的偶数都满足哥德巴赫猜想。
第一空:{{ input(1) }}
第二空:{{ input(2) }}
第三空:{{ input(3) }}
第四空:{{ input(4) }}
第五空:{{ input(5) }}
- 下面是根据欧几里得算法编写的函数,它所计算的是a和b的?
{{ select(6) }}
- 最大公共质因子
- 最小公共质因子
- 最大公约数
- 最小公倍数
- 阅读程序写结果:
输入:30
输出:_____
{{ input(7) }}
- 10000 以内,与 10000 互质的正整数有( )个? {{ select(8) }}
- 2000
- 4000
- 6000
- 8000
- 完善程序
(最大公约数之和)下列程序想要求解整数n的所有约数两两之间最大公约数的和对 10007 求余后的值,试补全程序。举例来说,4 的所有约数是 1, 2, 4 。1 和 2 的最大公约数为 1 ;2 和 4 的最大公约数为 2 ;1 和 4 的最大公约数为 1 。于是答案为1+2+1=4。 要求getDivisor函数的复杂度为,gcd 函数的复杂度为。
第一空:{{ input(9) }}
第二空:{{ input(10) }}
第三空:{{ input(11) }}
第四空:{{ input(12) }}
第五空:{{ input(13) }}
- 100以内最大的素数是? {{ select(14) }}
- 89
- 97
- 91
- 93
- 319和377的最大公约数是? {{ select(15) }}
- 27
- 33
- 29
- 31
- 干支纪年法是中国传统的纪年方法,由10个天干和12个地支组合成60个天干地支。由公历年份可以根据以下公式和表格换算出对应的天干地支。 天干 =(公历年份)除以10所得余数 地支 =(公历年份)除以12所得余数
例如,今年是 2020 年,2020 除以 10 余数为 0,查表为"庚”;2020 除以 12,余数为 4,查表为“子” 所以今年是庚子年。 请问 1949 年的天干地支是( ). {{ select(16) }}
- 己酉
- 己亥
- 己丑
- 己卯
- (质因数分解)给出正整数 𝑛n,请输出将 n 质因数分解的结果,结果从小到大输出。 例如:输入 n=120,程序应该输出 2 2 2 3 5,表示:120=2×2×2×3×5。输入保证 。提示:先从小到大枚举变量 i,然后用 i 不停试除 n 来寻找所有的质因子。 试补全程序。
1 #include <cstdio>
2 using namespace std;
3 int n, i;
4
5 int main() {
6 scanf("%d", &n);
7 for(i = ①; ② <=n; i ++){
8 ③{
9 printf("%d ", i);
10 n = n / i;
11 }
12 }
13 if(④)
14 printf("%d ", ⑤);
15 return 0;
16 }
1)①处应填{{ select(17) }}
- 1
- n-1
- 2
- 0
2)②处应填{{ select(18) }}
- n/i
- n/(i*i)
- i*i
- i*i*i
3)③处应填{{ select(19) }}
- if(n%i==0)
- if(i*i<=n)
- while(n%i==0)
- while(i*i<=n)
4)④处应填{{ select(20) }}
- n>1
- n<=1
- i<n/i
- i+i<=n
5)⑤处应填{{ select(21) }}
- 2
- n/i
- n
- i
- 填空题
1 #include <stdio.h>
2
3 #define n 100000
4 #define N n+1
5
6 int m;
7 int a[N], b[N], c[N], d[N];
8 int f[N], g[N];
9
10 void init()
11 {
12 f[1] = g[1] = 1;
13 for (int i = 2; i <= n; i++) {
14 if (!a[i]) {
15 b[m++] = i;
16 c[i] = 1, f[i] = 2;
17 d[i] = 1, g[i] = i + 1;
18 }
19 for (int j = 0; j < m && b[j] * i <= n; j++) {
20 int k = b[j];
21 a[i * k] = 1;
22 if (i % k == 0) {
23 c[i * k] = c[i] + 1;
24 f[i * k] = f[i] / c[i * k] * (c[i * k] + 1);
25 d[i * k] = d[i];
26 g[i * k] = g[i] * k + d[i];
27 break;
28 }
29 else {
30 c[i * k] = 1;
31 f[i * k] = 2 * f[i];
32 d[i * k] = g[i];
33 g[i * k] = g[i] * (k + 1);
34 }
35 }
36 }
37 }
38
39 int main()
40 {
41 init();
42
43 int x;
44 scanf("%d", &x);
45 printf("%d %d\n", f[x], g[x]);
46 return 0;
47 }
假设输入的x是不超过1000的自然数,完成下面的判断题和单选题:
判断题
1)若输入不为”1”,把第12行删去不会影响输出的结果。{{ select(22) }}
- 正确
- 错误
2)第24行f[i * k] = f[i] / c[i * k] * (c[i * k] + 1)
中的” f[i]/c[i*k]
”可能存在无法整除而向下取整的情况。{{ select(23) }}
- 正确
- 错误
3)在执行完init()后,f数组不是单调递增的,但g数组是单调递增的。{{ select(24) }}
- 正确
- 错误
单选题
4)init函数的时间复杂度为?{{ select(25) }}
5)在执行完init() 后,f[1],f[2],f[3]......f[100]中有()个等于2?{{ select(26) }}
- 23
- 24
- 25
- 26
6)当输入”1000”时,输出为?{{ select(27) }}
- ”15 1340”
- ”15 2340”
- ”16 2340”
- ”16 1340”
- (枚举因数)从小到大打印正整数 n 的所有正因数。 试补全枚举程序。
01 #include <bits/stdc++.h>
02 using namespace std;
03
04 int main() {
05 int n;
06 cin >> n;
07
08 vector<int> fac;
09 fac.reserve((int)ceil(sqrt(n)));
10
11 int i;
12 for (i = 1; i * i < n; ++i) {
13 if (①) {
14 fac.push_back(i);
15 }
16 }
17
18 for (int k = 0; k < fac.size(); ++k) {
19 cout << ② << " ";
20 }
21 if (③) {
22 cout << ④ << " ";
23 }
24 for (int k = fac.size() - 1; k >= 0; --k) {
25 cout << ⑤ << " ";
26 }
27 }
1)①处应填?{{ select(28) }}
- n % i == 0
- n % i == 1
- n % (i-1) == 0
- n % (i-1) == 1
2)②处应填?{{ select(29) }}
- n / fac[k]
- fac[k]
- fac[k]-1
- fn / (fac[k]-1)
3)③处应填?{{ select(30) }}
- (i-1) * (i-1) == n
- (i-1) * i == n
- i * i == n
- i * (i-1) == n
4)④处应填?{{ select(31) }}
- n-i
- n-i+1
- i-1
- i
5)⑤处应填?{{ select(32) }}
- n / fac[k]
- fac[k]
- fac[k]-1
- n / (fac[k]-1)
- 填空题
假设输入的n是绝对值不超过1000的整数,完成下面的判断题和单选题。
判断题
1)如果输入的n为正整数,solve2
函数的作用是计算n所有的因子的平方和。{{ select(33) }}
- 正确
- 错误
2)第13~14行的作用是避免n的平方根因子i(或n/i)进入第16行而被计算两次。{{ select(34) }}
- 正确
- 错误
3)如果输入的n为质数,solve2(n)
的返回值为。{{ select(35) }}
- 正确
- 错误
单选题
4)如果输入的n为质数p的平方,那么solve2(n)
的返回值为{{ select(36) }}
5)当输入为正整数时,第一项减去第二项的差值一定?{{ select(37) }}
- 大于0
- 大于等于0且不一定大于0
- 小于0
- 小于等于0且不一定小于0
6)当输入为5
时,输出为?{{ select(38) }}
- 651 625
- 650 729
- 651 676
- 652 625