HDU - 5528Count a * b 数学公式推导
照着这个写的,忘了哪个大佬博客里的了,
但很多初学者,像我一样可能不懂其中一些符号的意义,还有为什么可以这样推导,所以我自己又推导了一下,并用自己的观点解释了下一些自己不懂的过程。
至于mod264,是因为中途计算结果可能超long long,所以注意使用unsigned long long
#include<cstdio>
typedef unsigned long long ull;
typedef long long ll;
const int N=;
bool nop[N]={false};
int pn,pri[N];
void initp()
{
pn=;
for(int i=;i<N;i++)
{
if(!nop[i])
pri[pn++]=i;
for(int j=;j<pn&&i*pri[j]<N;j++)
{
nop[i*pri[j]]=true;
if(i%pri[j]==)
break;
}
}
}
ull solve(int x)
{
ull ans1=1ull,ans2=1ull*x;
for(int i=;i<pn&&pri[i]*pri[i]<=x;i++)
{
if(x%pri[i]==)
{
ll sum=1ll;
int exp=,p=;
while(x%pri[i]==)
{
p*=pri[i];
sum+=1ll*p*p;
x/=pri[i];
exp++;
}
ans1*=1ull*sum;
ans2*=1ull*(exp+);
}
}
if(x>)
{
ans1*=1ull*x*x+;
ans2*=2ull;
}
return ans1-ans2;
}
int main()
{
initp();
int t,n;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
printf("%llu\n",solve(n));
}
return ;
}
项式分解
#include<cstdio>
typedef unsigned long long ull;
const int N=;
bool nop[N]={false};
int pn,pri[N],pa,pp[N],exp[N];
ull ans1,ans2;
void initp()
{
pn=;
for(int i=;i<N;i++)
{
if(!nop[i])
pri[pn++]=i;
for(int j=;j<pn&&i*pri[j]<N;j++)
{
nop[i*pri[j]]=true;
if(i%pri[j]==)
break;
}
}
}
void getFac(int x)
{
pa=;
for(int i=;i<pn&&pri[i]*pri[i]<=x;i++)
{
if(x%pri[i]==)
{
pp[pa]=pri[i];
exp[pa]=;
while(x%pri[i]==)
{
x/=pri[i];
exp[pa]++;
}
pa++;
}
}
if(x>)
{
pp[pa]=x;
exp[pa++]=;
}
}
void dfs(int pos,int xx)
{
if(pos>=pa)
{
ans1+=1ull*xx*xx;
return ;
}
dfs(pos+,xx);
for(int i=,p=;i<exp[pos];i++)
{
p*=pp[pos];
dfs(pos+,xx*p);
}
}
ull solve(int x)
{
ans1=0ull;
ans2=1ull*x;
getFac(x);
dfs(,);
for(int i=;i<pa;i++)
ans2*=1ull*(exp[i]+);
return ans1-ans2;
}
int main()
{
initp();
int t,n;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
printf("%llu\n",solve(n));
}
return ;
}
唯一分解
HDU - 5528Count a * b 数学公式推导的更多相关文章
- HDU 5734 Acperience ( 数学公式推导、一元二次方程 )
题目链接 题意 : 给出 n 维向量 W.要你构造一个 n 维向量 B = ( b1.b2.b3 ..... ) ( bi ∈ { +1, -1 } ) .然后求出对于一个常数 α > 0 使得 ...
- HDU 4816 Bathysphere(数学)(2013 Asia Regional Changchun)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4816 Problem Description The Bathysphere is a spheric ...
- HDU 5584 LCM Walk 数学
LCM Walk Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5584 ...
- HDU 4336 Card Collector 数学期望(容斥原理)
题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=4336 题意简单,直接用容斥原理即可 AC代码: #include <iostream> ...
- HDU 5570 balls 期望 数学
balls Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5570 De ...
- hdu 4710 Balls Rearrangement (数学思维)
意甲冠军:那是, 从数0-n小球进入相应的i%a箱号.然后买一个新的盒子. 今天的总合伙人b一个盒子,Bob试图把球i%b箱号. 求复位的最小成本. 每次移动的花费为y - x ,即移动前后盒子编号 ...
- HDU 4790 Just Random 数学
链接:pid=4790">http://acm.hdu.edu.cn/showproblem.php?pid=4790 意:从[a.b]中随机找出一个数字x,从[c.d]中随机找出一个 ...
- HDU 1018-Big Number(数学)
Big Number Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total ...
- HDU 1840 Equations (简单数学 + 水题)(Java版)
Equations 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1840 ——每天在线,欢迎留言谈论. 题目大意: 给你一个一元二次方程组,a(X^2 ...
随机推荐
- python — 装饰器、迭代器
目录 1 装饰器 2 迭代器 3 可迭代对象 1 装饰器 1.1目的.应用场景: 目的: 在不改变原函数内部代码的基础上,在函数执行前后自定义功能. 应用场景: 想要为函数扩展功能时,可以选择用装饰器 ...
- linux下mysql启动 Starting MySQL. ERROR! The server quit without updating PID file(xxx/x.pid)
service mysql start 报错: Starting MySQL. ERROR! The server quit without updating PID file(xxx/x.pid) ...
- linux下的终端利器 tmux 安装以及使用
ref :https://www.jianshu.com/p/fd3bbdba9dc9 Introduction 为什么使用tmux? 因为如果我们用terminal连接remote server.发 ...
- Unity Cube一面显示图片
Cube加plane 把plane调整到和cube的一面一样大小,并放到那一面的位置,然后再Hierarchy面板选中plane,把图片拖到Inspector的plane下.
- 基于Windows服务的聊天程序
本文将演示怎么通过C#开发部署一个Windows服务,该服务提供各客户端的信息通讯,适用于局域网.采用TCP协议,单一服务器连接模式为一对多:多台服务器的情况下,当客户端连接数超过预设值时可自动进行负 ...
- luogu2261余数求和题解--整除分块
题目链接 https://www.luogu.org/problemnew/show/P2261 分析 显然\(k\) \(mod\) \(i=k-\lfloor {k/i}\rfloor\) \(\ ...
- django 函数和类实现分页案例
方法一: 模拟分页from django.shortcuts import render,HttpResponse from app01 import models def hostnames(req ...
- git冲突Pull is not possible because you have unmerged files
本地的push和merge会形成MERGE-HEAD(FETCH-HEAD), HEAD(PUSH-HEAD)这样的引用.HEAD代表本地最近成功push后形成的引用.MERGE-HEAD表示成功pu ...
- ES6-数组的扩展-整理
一.Array.from():负责把类似数组的对象以及可遍历的对象转为真正的数组 1.类似数组的对象 let arrayLike = { '0': 'a', '1': 'b', '2': 'c', l ...
- ESP8266 UDP通信
#include "driver/uart.h" #include "espconn.h" void ICACHE_FLASH_ATTR user_rf_pre ...