题意:求1~n中因子和为奇数的个数。
分析:这道题就是一个技巧,所有的平方数的因子和为奇数,因为所有平方数的因子数为奇数个,如果因子是偶数,一定是偶数个,因为平方数中素因子分解后素因子2的幂为偶数,无论怎么组合,一定有偶数个能被2整除的数,剩下的就是奇数个奇数,和一定是奇数。此外,平方数乘以2也是因子数为奇数,因为这个数一定有偶数个因子,其中偶数的个数一定为奇数个,因为素因子2的幂一定是奇数否则不能成为平方数乘以2。有奇数个偶数,就有奇数个奇数。所以最后的结果就是n把上述的数全部剪掉。我采用的是预处理的方法。
代码如下:
#include <set>
#include <map>
#include <stack>
#include <queue>
#include <math.h>
#include <vector>
#include <utility>
#include <string>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#include <functional>
using namespace std;
long long b[1500050];
int main(){
long long k=1;
for(long long i=1;i<1000050;i++){
b[k]=i*i*2;
k++;
}
int t;
cin>>