n<=10000000的图,满足:如果(i,j)>1就连一条边权1的无相变,问所有d(u,v) (u<=v)--u到v的最短路之和。

首先1和>n/2的质数都是孤立的点。然后两个数x,y如果(x,y)>1最短路就1,如果(x,y)=1且x,y都不是1或>n/2的质数一定能走,具体这么走:$P_x$--x的最小质因子,那就$x->p_x*p_y->y$,那这样都走不了,还有:$x->p_x*2->p_y*2->y$这种一定走得了,因为x或y如果是合数那$p_x$最大是根号的,再*2根本爆不了;如果是质数那由于<=n/2,所以自己*2一定不会爆,因此就统计1的路径数,2的路径数和3的路径数即可。

1的路径数:$\sum_{1<=x<=n,1<=y<=n}(x,y)>1=\sum_{x=1}^{n}x-1-\varphi (x)$。

3的路径数用总的减掉1和2的。

2的路径数,也就是满足$(x,y)=1$且$p_x*p_y<=n$且$x>1,y>1$且x,y都不是大于n/2的质数的:

(1)x,y都是合数:那直接枚举合数,然后$\sum_{y是合数}^{n} \varphi (y)- (<=y的质数) + (x的质因子数)-1$,注意到这一条说的质数、质因子都是包括>n/2的。

(2)x质y合:那也枚举合数,$\sum_{y是合数}^{n} s_y-(y的质因子数)$,其中$s_y$表示比$x*p_y<=n$的质数x的数量,注意到这一条说的质数、质因子都是不包括>n/2的。

(3)x质y质,那枚举质数,$\sum_{y是质数}^{n} x*y<=n$,即$x<=n/y$,注意到这里枚举的质数是<=n/2的,而且这里统计的x也是<=n/2的。

OK!

 #include<string.h>
#include<stdlib.h>
#include<stdio.h>
//#include<assert.h>
#include<algorithm>
//#include<iostream>
using namespace std; int n;
#define maxn 10000011
int prime[maxn/],lp=,phi[maxn],small[maxn],sum[][maxn],sonofbitch[][maxn]; bool notprime[maxn];
void pre(int n)
{
phi[]=; sum[][]=sum[][]=;
for (int i=;i<=n;i++)
{
sum[][i]=sum[][i-]+(!notprime[i] && i*<=n);
sum[][i]=sum[][i-]+(!notprime[i]);
if (!notprime[i]) {prime[++lp]=i; phi[i]=i-; sonofbitch[][i]=(i*<=n);
sonofbitch[][i]=; small[i]=i;}
for (int j=;j<=lp && 1ll*i*prime[j]<=n;j++)
{
notprime[i*prime[j]]=; small[i*prime[j]]=prime[j];
if (i%prime[j])
{
phi[i*prime[j]]=phi[i]*(prime[j]-);
sonofbitch[][i*prime[j]]=sonofbitch[][i]+(prime[j]*<=n);
sonofbitch[][i*prime[j]]=sonofbitch[][i]+;
}
else
{
phi[i*prime[j]]=phi[i]*prime[j];
sonofbitch[][i*prime[j]]=sonofbitch[][i];
sonofbitch[][i*prime[j]]=sonofbitch[][i];
break;
}
}
}
} int main()
{
scanf("%d",&n); pre(n);
#define LL long long
LL tot1=,tot2=,tot3=,m=n-(sum[][n]-sum[][n])-,tot=m*1ll*(m-)/; for (int i=;i<=n;i++) tot1+=i--phi[i]; for (int i=;i<=n;i++)
if (notprime[i])
tot2+=phi[i]-sum[][i]+sonofbitch[][i]-+sum[][n/small[i]]-sonofbitch[][i];
else if (i*<=n) tot2+=sum[][min(i-,n/i)]; tot3=tot-tot1-tot2; printf("%lld\n",tot1+tot2*+tot3*);
return ;
}

Codeforces870F. Paths的更多相关文章

  1. [LeetCode] Binary Tree Paths 二叉树路径

    Given a binary tree, return all root-to-leaf paths. For example, given the following binary tree: 1 ...

  2. [LeetCode] Unique Paths II 不同的路径之二

    Follow up for "Unique Paths": Now consider if some obstacles are added to the grids. How m ...

  3. [LeetCode] Unique Paths 不同的路径

    A robot is located at the top-left corner of a m x n grid (marked 'Start' in the diagram below). The ...

  4. leetcode : Binary Tree Paths

    Given a binary tree, return all root-to-leaf paths. For example, given the following binary tree: 1 ...

  5. UVA 10564 Paths through the Hourglass[DP 打印]

    UVA - 10564 Paths through the Hourglass 题意: 要求从第一层走到最下面一层,只能往左下或右下走 问有多少条路径之和刚好等于S? 如果有的话,输出字典序最小的路径 ...

  6. LeetCode-62-Unique Paths

    A robot is located at the top-left corner of a m x n grid (marked 'Start' in the diagram below). The ...

  7. Leetcode Unique Paths II

    Follow up for "Unique Paths": Now consider if some obstacles are added to the grids. How m ...

  8. POJ 3177 Redundant Paths(边双连通的构造)

    Redundant Paths Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 13717   Accepted: 5824 ...

  9. soj 1015 Jill's Tour Paths 解题报告

    题目描述: 1015. Jill's Tour Paths Constraints Time Limit: 1 secs, Memory Limit: 32 MB Description Every ...

随机推荐

  1. 多功能Markdown编辑器MarkdownPad 2的下载、安装和初步使用步骤(图文详解)(博主推荐)

    不多说,直接上干货!   MarkdownPad 是什么? 一.MarkdownPad 2的下载 http://markdownpad.com/download/markdownpad2-setup. ...

  2. thinkphp3.2 + soap

    服务器配置 扩展libxml2下载地址:http://xmlsoft.org/downloads.html 在windows下的php.ini文件里 找到这一行代码(如没有则自行添加) extensi ...

  3. Maximum Subsequence Sum 最大子序列和的进击之路

    本文解决最大子序列和问题,有两个题目组成,第二个题目比第一个要求多一些(其实就是要求输出子序列首尾元素). 01-复杂度1 最大子列和问题   (20分) 给定KK个整数组成的序列{ N1​​, N2 ...

  4. SQL表与表连接关系

    一.SQL连接方式 left join :左连接,返回左表中所有的记录以及右表中连接字段相等的记录. right join :右连接,返回右表中所有的记录以及左表中连接字段相等的记录. inner j ...

  5. Mysql函数、语句

    一:日期函数: 日期函数: SELECT CURDATE(); # 2018-07-07 SELECT CURTIME(); # 11:28:24 SELECT NOW(); # 2018-07-07 ...

  6. Android 在代码中安装 APK 文件

    废话不说,上代码 private void install(String filePath) { Log.i(TAG, "开始执行安装: " + filePath); File a ...

  7. [经典面试题]包含T全部元素的最小子窗口

    题目描述 给定一个包含一系列字符的集合T和字符串S,请在字符串S中找到一个最小的窗口,这个窗口中必须包含T中的所有字符.  例如,  S = "ADOBECODEBANC"  T ...

  8. win8怎么打开或关闭快速启动(进入BIOS前的设置)

    win8系统之后,系统添加了快速启动功能,这让Windows的启动速度快了不少.但是,任何事物有利有弊,相信不少人在进入BIOS或者重装系统时遇到了麻烦.接下来我们看看在win8及以上版本怎么打开或关 ...

  9. How to Configure YUM to Install Packages From Installation ISO (RHEL)

    1. Mount RHEL Installation ISO mkdir /media/dvd mount /dev/cdrom /media/dvd 2. Get Media ID with the ...

  10. chmod - 改变文件的访问权限

    总揽 chmod [options] mode file... POSIX 选项: [-R] GNU 选项 (最短方式): [-cfvR] [--reference=rfile] [--help] [ ...