一.若求一个数 N 的最大奇约数 t
若 N 为奇数,则 t=N ;
若 N 为偶数,则 mid=N/2,if mid 为奇数 则 t=mid
if mid 为偶数 则重复循环,知道mid为奇数
二.若求1-N 之间每个整数的最大奇约数的和
1.枚举法
先求出每个整数的最大奇约数,再求和
这种方法适用于 N 较小时,当 N 较大时,时间复杂度太大
2.规律法
例. 若 N=16
(1) 1-16 的奇数保留,偶数的最大奇约数肯定在 1- N/2 之间, 即保留 1 3 5 7 9 11 13 15
(2) 1-8 的奇数保留,偶数的最大奇约数肯定在 1- N/2 之间,即保留 1 3 5 7 (对应于 16 12 10 14)
(3) 1-4 的奇数保留,偶数的最大奇约数肯定在 1- N/2 之间,即保留 1 3 (对应于 8 6)
(4) 1-2 的奇数保留,偶数的最大奇约数肯定在 1- N/2 之间,即保留 1 (对应于 4)
(5) 1 (对应于2)
代码:
#include<iostream>
using namespace std;
int main()
{
int n;
long long sum = 0; //考虑到N 很大时
cin >> n;
while (n)
{
for (int i = 1; i <= n; i += 2)
sum += i;
n /= 2;
}
cout << sum<<endl;
return 0;
}