LightOJ 1336 Sigma Function 算数基本定理
2024-10-21 05:03:44
题目大意:f(n)为n的因子和,给出 n 求 1~n 中f(n)为偶数的个数.
题目思路:算数基本定理:
n=p1^e1*p2^e1 …… pn^en (p为素数);
f(n)=(1+p1+p1^2+p^3……+p^e1)*(1+p2+p2^2……+p2^e2)……*(1+pn+pn^2……+pn^en)。
偶数个个奇数相乘仍为奇数,奇数个奇数相乘则为偶数,为了使f(n)为奇数,那么多项式中的每一项都应为奇数。
对于每个多项式内:偶数个奇数相加为偶数,奇数个奇数相加为奇数,为了使多项式为奇数,那么e应为偶数(因为前面还要加1)。
我们知道:
若 n=p1^e1*p2^e1 …… pn^en;
那么 n^2=(p1^e1*p2^e1 …… pn^en)^2 =p1^2e1*p2^2e1 …… pn^2en。
2为唯一一个偶素数,且p=2的项一定为奇数。
所以我们则需要统计1到n中的平方数个数和2倍的平方数的个数,得到的为1到n中f(n)为奇数的个数。
#include<cstdio>
#include<stdio.h>
#include<cstdlib>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<vector>
#include<queue>
#define INF 0x3f3f3f3f
#define MAX 1005 using namespace std; int main()
{
int cnt=,T;
long long n,sum;
scanf("%d",&T);
while(T--)
{
scanf("%lld",&n);
sum=;
for(long long i=;i*i<=n;i++)
{
sum++;
if(*i*i <= n)
sum++;
}
printf("Case %d: %lld\n",cnt++,n-sum);
}
}
最新文章
- NOSDK--关于android傻瓜式的分包设想
- bootstrap插件思路整理
- C语言 链表的使用(链表的增删查改,链表逆转,链表排序)
- 自动垂直居中的js
- C#线程池ThreadPool的理解
- Android使用SimpleAdapter
- Player启动时提示 ";System.InvalidOperationException:无法加载计数器名称数据
- 关于PHP的mkdir函数
- 在linux上安装MySQL数据库,并简单设置用户密码,登录MySQL
- Oracle 11g streams部署
- switch的穿透,是参数里包含case内容就执行。
- Nginx ab压力测试
- Firefox及我使用的firefox扩展
- JAVA爬取百度贴吧图片
- 2016-2017-2 20155309南皓芯java第四周学习总结
- C语言实现选择排序算法
- 基于bootstrap物资管理系统后台模板——后台
- linux环境下搭建osm_web服务器四(对万国语的地名进行翻译和检索):
- 附3:tips of layout binding and styling
- JavaScript防止重复提交表单