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 数学公式推导的更多相关文章

  1. HDU 5734 Acperience ( 数学公式推导、一元二次方程 )

    题目链接 题意 : 给出 n 维向量 W.要你构造一个 n 维向量 B = ( b1.b2.b3 ..... ) ( bi ∈ { +1, -1 } ) .然后求出对于一个常数 α > 0 使得 ...

  2. HDU 4816 Bathysphere(数学)(2013 Asia Regional Changchun)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4816 Problem Description The Bathysphere is a spheric ...

  3. HDU 5584 LCM Walk 数学

    LCM Walk Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5584 ...

  4. HDU 4336 Card Collector 数学期望(容斥原理)

    题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=4336 题意简单,直接用容斥原理即可 AC代码: #include <iostream> ...

  5. HDU 5570 balls 期望 数学

    balls Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5570 De ...

  6. hdu 4710 Balls Rearrangement (数学思维)

    意甲冠军:那是,  从数0-n小球进入相应的i%a箱号.然后买一个新的盒子. 今天的总合伙人b一个盒子,Bob试图把球i%b箱号. 求复位的最小成本. 每次移动的花费为y - x ,即移动前后盒子编号 ...

  7. HDU 4790 Just Random 数学

    链接:pid=4790">http://acm.hdu.edu.cn/showproblem.php?pid=4790 意:从[a.b]中随机找出一个数字x,从[c.d]中随机找出一个 ...

  8. HDU 1018-Big Number(数学)

    Big Number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total ...

  9. HDU 1840 Equations (简单数学 + 水题)(Java版)

    Equations 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1840 ——每天在线,欢迎留言谈论. 题目大意: 给你一个一元二次方程组,a(X^2 ...

随机推荐

  1. 6.Linux查看哪个进程占用磁盘IO

    $ iotop -oP命令的含义:只显示有I/O行为的进程

  2. css鼠标悬浮控制元素隐藏与显示

    在网页开发中经常有需求是鼠标移动到一个元素A身上时,另外一个元素B显示. 如下图 当鼠标移到图片上时,相关的描述从下方显示出来. css实现原理与情景: A 是 B 的父元素 B 默认隐藏 B{opa ...

  3. [http]HTTP请求过程

    我们在浏览器输入http://www.baidu.com想要进入百度首页,但是这是个域名,没法准确定位到服务器的位置,所以需要通过域名解析,把域名解析成对应的ip地址,然后通过ip地址查找目的主机.整 ...

  4. Ubuntu 上网

    1.打开终端 2.sudo gedit /etc/wpa_supplicant/wpa_supplicant.conf(回车之后会弹出一个编辑页面,在里面打入第三步里面的配置文件)3.配置文件如下:c ...

  5. Java Web-Cookie和Session

    Java Web-Cookie和Session 会话 会话的概念 一次会话是指浏览器从浏览器第一次给服务器发送请求建立到其中一方断开结束会话的一个过程.它包含多次请求和响应. 会话是用来在一次会话的范 ...

  6. [转载]为什么jar包中能看见源码

    [转载]为什么jar包中能看见源码 这个也是我之前发现过的一个现象,只是之前没有研究过.今天正好在知乎看见,总结一下: 对于Maven或者Gradle项目,依赖的部分会自动从远程仓库下载源码 生成的j ...

  7. JDK + Tomcat 安装 + 制作自定义镜像【第 2 篇 Tomcat】

    [第 1 篇 JDK]:https://www.cnblogs.com/del88/p/11842387.html[第 2 篇 Tomcat]:https://www.cnblogs.com/del8 ...

  8. 【shell脚本】字符串和数组的使用

    字符串 可以使用单引号和双引号定义字符串变量但是单引号中不支持变量解析 #! /bin/bashusername="mayuan" str_1="hello ${user ...

  9. css改变鼠标指针的形状

    <html> <body> <span style="cursor:auto"> <br /> <span style=&qu ...

  10. Shell中比较判断

    一.shell判断数组中是否包含某个元素:ary=(1 2 3)a=2if [[ "${ary[@]}" =~ "$a" ]] ; then    echo & ...