奇因数代数和
定义正整数m的奇因数f(m)
(1)若m为奇数,f(m)=m
(2)若m为偶数,f(m)为m去除其所有偶因数后的奇因数
例如f(6)=3,f(7)=7,f(8)=1,试求奇因数代数和:
n
s()=∑(-1)^(m-1) f(m)
m=1
1.设计要点
根据求和式,m取1,2,n,设计m(1~n)循环,在循环中实施求和:
若m为奇数,s=s+m;若m为偶数,s=s-d;,这里的d为通过循环去除m偶因数后的奇因数。
注意到偶数m(通过赋值d=-m;对d操作以保持循环变量m不变)的偶因数“2”可能有多个,应用条件循环 while(d%2=0)d=d/2;完成去除偶数m的所有偶因数操作。
代码:
#include <stdio.h>
int main() {
int d, n, b;
long s;
scanf("%d", &n);
s = 0;
for (int i = 1; i <= n; i++) {
if (i % 2 != 0)
s += i;
else {
d = i;
while (d % 2 == 0)
d /= 2;
s -= d;
}
}
printf("%ld\n", s);
return 0;
}