LightOJ1336
2024-10-09 03:51:14
题目大意:
给你一个 n ,求出 1 到 n 中有多少个数的因数和为偶数。
解题思路:
可以先求出因数和为奇数的数字的个数。
由算术基本定理我们可以得到:N=P1a1P2a2P3a3 … Pnan, σ(N) = (1+p1+p12+ … +p1a1)(1+p2+p22+ … +p2a2) … (1+pn+pn2+ … +pnan). 其中各个 p 均为素数。
我们先考虑那些因数中没有 2 的数。由于 σ(N) 为奇数,那么对于式中相乘的各项应该都是奇数,一个显而易见的事实是:除了 2 以外其他的素数均为奇数。我们随意取出一项:(1+pi+pi2+ … +piai),不难发现一个结论:如果 ai 为偶数,那么这一项的和为奇数;否则为偶数。于是我们可以大胆地推测 σ(N) 中各个非2质因数的指数均为偶数,那么这些数均为平方数,我们只需去掉 1 到 n 中的所有平方数,即可去掉那些因数中没有 2 而且因数和为奇数的数。
如果考虑因数中有 2 的数呢?其实只需在上面求出各个平方数时顺便再乘一下 2 即可。
AC代码:
#include<stdio.h>
#include<math.h>
typedef long long ll;
int main(){
int t;
ll n;
scanf("%d",&t);
for(int j=;j<=t;j++){
scanf("%lld",&n);
ll ans=n;
for(ll i=;i*i<=n;i++){
ans--;
if(*i*i<=n) ans--;
}
printf("Case %d: %lld\n",j,ans);
}
return ;
}
最新文章
- 团队开发——冲刺1.c
- Magento订单打印(pdf格式)
- javascript实例学习之六—百叶窗效果
- iOS开发——数据持久化&;本地数据的存储(使用NSCoder将对象保存到.plist文件)
- Delphi 7下使用Log4Delphi 0.8日志组件
- Code Forces 711D Directed Roads
- GitHub Linux下使用方法
- 百度经纬度和google经纬度互转
- JavaScript基础:创建对象
- 0_Simple__asyncAPI
- QTP10破解方法及mgn-mqt82.exe下载
- 深入java虚拟机学习 -- 类的加载机制(续)
- [转] External(and Live) snapshots with libvirt
- ServiceLoader详解
- shell爬虫--抓取某在线文档所有页面
- MT【68】一边柯西一边舍弃
- 第84讲:Scala中List和ListBuffer设计实现思考
- Java通过JDBC进行简单的增删改查(以MySQL为例)
- 20145337《网络对抗技术》逆向及BOF基础
- 基于EasyUi的datagrid合并单元格JS写法