1874 素数和最大 - Wikioi
题目描述 Description
有一天萌萌哒Sevenkplus在跟素数们玩>_<。。。他玩着玩着突然想到一个问题!就是这样的:
从1到n这n个自然数中,选出一些数使得它们之间两两互质并且它们的和最大。
当然Sevenkplus几分钟就秒杀了>_<。。。你也来试试吧~~~
比如说n=10,那么选择{1,5,7,8,9}就行了,答案是30。
输入描述 Input Description
一行一个整数n
输出描述 Output Description
一行一个整数表示答案
样例输入 Sample Input
3
样例输出 Sample Output
6
数据范围及提示 Data Size & Hint
【数据范围】
测试点
1..2:n<=100
3..5:n<=1000
6..10:n<=200000
【卖萌向】
素数可是很可爱的哦^_^
【来源】
我们都爱GYZ摸你赛 Problem C Hard
好题
一开始眼瞎+脑残,以为肯定是每一个素数都单独选它的最大次幂,全WA
好吧,看题解,果真是网络流+数论
先筛素数,把素数分成两类,一类是小于等于根号n的,这些可以自己乘多次,大于根号n的只能有一次幂
我们考虑这两类凑成一对一对的,如果凑成一对会更优,就连一条权值为增益的边(不过为什么不能小素数凑对呢?)
然后做二分图最大匹配
代码就别看了,因为建图,我的变量名已经乱了
var
flag:array[..]of boolean;
zhi,best:array[..]of longint;
first,next,last,val,cost,vis,db,link:array[..]of longint;
n,tot,jie,num,time:longint;
ans:int64; procedure shai;
var
i,j:longint;
begin
for i:= to n do
begin
if flag[i]=false then
begin
inc(tot);
zhi[tot]:=i;
end;
for j:= to tot do
begin
if i*zhi[j]<=n then flag[i*zhi[j]]:=true
else break;
if i mod zhi[j]= then break;
end;
end;
end; procedure insert(x,y,z:longint);
begin
inc(num);
last[num]:=y;
next[num]:=first[x];
first[x]:=num;
val[num]:=z;
if db[x]<z then db[x]:=z;
end; procedure init;
var
i,j,k,s:longint;
begin
read(n);
shai;
ans:=;
for i:= to tot do
begin
k:=zhi[i];
while k*zhi[i]<=n do
k:=k*zhi[i];
if k>zhi[i] then jie:=i;
best[i]:=k;
ans:=ans+k;
end;
for i:= to jie do
for j:=jie+ to tot do
begin
s:=zhi[j];
while s*zhi[i]<=n do
s:=s*zhi[i];
if s>best[i]+best[j] then insert(i,j,s-best[i]-best[j]);
end;
for i:= to jie do
insert(i,tot+i,);
end; function find(x:longint):boolean;
var
i:longint;
begin
vis[x]:=time;
i:=first[x];
while i<> do
begin
if (vis[last[i]]<>time)and(val[i]=db[x]+db[last[i]]) then
begin
vis[last[i]]:=time;
if (link[last[i]]=)or(find(link[last[i]])) then
begin
link[last[i]]:=x;
cost[last[i]]:=val[i];
exit(true);
end;
end;
i:=next[i];
end;
exit(false);
end; function km:int64;
var
i,j,k,d:longint;
begin
for i:= to jie do
begin
while true do
begin
inc(time);
if find(i) then break;
d:=maxlongint;
for k:= to jie do
if vis[k]=time then
begin
j:=first[k];
while j<> do
begin
if vis[last[j]]<>time then
if d>db[k]+db[last[j]]-val[j] then d:=db[k]+db[last[j]]-val[j];
j:=next[j];
end;
end;
if d=maxlongint then break;
for j:= to jie do
if vis[j]=time then dec(db[j],d);
for j:=jie+ to tot do
if vis[j]=time then inc(db[j],d);
end;
end;
km:=;
for i:=jie+ to tot do
inc(km,cost[i]);
end; begin
init;
write(km+ans);
end.
1874 素数和最大 - Wikioi的更多相关文章
- wikioi 1430 素数判定
/*====================================================================== 题目描述 Description 质数又称素数.指在一 ...
- wikioi 1434 孪生素数 水题、素数模版
1434 孪生素数 时间限制: 1 s 空间限制: 1000 KB 题目等级 : 白银 Silver 题目描述 Description 输出100以内的所有相差6的孪生素数:如, 5 11 7 13 ...
- Help Hanzo (素数筛+区间枚举)
Help Hanzo 题意:求a~b间素数个数(1 ≤ a ≤ b < 231, b - a ≤ 100000). (全题在文末) 题解: a~b枚举必定TLE,普通打表MLE,真是头疼 ...
- Java 素数 prime numbers-LeetCode 204
Description: Count the number of prime numbers less than a non-negative number, n click to show more ...
- 求解第N个素数
任务 求解第 10,0000.100,0000.1000,0000 ... 个素数(要求精确解). 想法 Sieve of Eratosthenes 学习初等数论的时候曾经学过埃拉托斯特尼筛法(Sie ...
- 使用BitArray判断素数
首先显示1024范围内的所有素数,然后显示输入的数是否是素数.1024 是代码中计算的素数的范围,可以修改.计算平方根,是为了确定一个基数的范围.1024的平方根是32,两个超过32 的数相乘,肯定大 ...
- 查找素数Eratosthenes筛法的mpi程序
思路: 只保留奇数 (1)由输入的整数n确定存储奇数(不包括1)的数组大小: n=(n%2==0)?(n/2-1):((n-1)/2);//n为存储奇数的数组大小,不包括基数1 (2)由数组大小n.进 ...
- Openjudge 1.13-23:区间内的真素数(每日一水)
总时间限制: 1000ms 内存限制: 65536kB 描述 找出正整数 M 和 N 之间(N 不小于 M)的所有真素数.真素数的定义:如果一个正整数 P 为素数,且其反序也为素数,那么 P 就为 ...
- java语言 打印素数实例
//根据定义判断素数---循环n-1次,当n很大时循环n次 public static void main(String[] args) { // TODO Auto-generated ...
随机推荐
- XP下Winform背景透明问题
win 7上usercontrol控件背景色设置为透明,显示无异常.到XP上一看,变成Control颜色了,即常见的灰色.网上搜了一堆,没发现有用的.偶然看到XP上Label的背景色可以透明,于是用L ...
- java演示适配器(adapter)模式
为什么要使用模式: 模式是一种做事的一种方法,也即实现某个目标的途径,或者技术. adapter模式的宗旨就是,保留现有类所提供的服务,向客户提供接口,以满足客户的需求. 类适配器:客户端定义了接口并 ...
- asp.net post方法;对象转json
[System.Web.Services.WebMethod()] public static string GetPoints(string userId) { st ...
- HDOJ2021发工资咯:)
发工资咯:) Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Subm ...
- Windows下TEX排版论文攻略—CTeX、JabRef使用心得
笔者刚刚接触到TEX排版,相关知识完全空白,用了两天时间学习并完成了一篇论文的完整排版. 期间遇到不少小问题,着实辛苦,分享至上,现将其解决办法总结归纳,共同学习. 一.工具介绍 TeX是一个 ...
- Oracle工程师技能树
整理了份Oracle工程师的技能树,方便大家在学习的过程中有个大体方向. 欢迎提意见,可以随时更新. 源文件链接地址点此 图片如下: 多媒体插件如下:
- ios开发入门篇(二):Objective-C的简单语法介绍
一:面向对象的思想 objective-c与C语言的编程思想不同,C语言是面向过程的编程,而objective-c则是面向对象的编程,所谓面向对象,我个人的理解,就是抽象.将具有一定共同点的实物抽象成 ...
- 1.6建造者模式(生成器模式) Builder
1.概念:将一个复杂对象的构建和他的表示分离,使得同样的构件可以创建不同的表示. 2.实例:肯德基和中餐,肯德基抽象了整个做菜的复杂过程(相同的构建),然后在不同的店铺进行实现(不同的表示).中餐往往 ...
- Android应用资源--之属性(Attribute)资源
原文链接: http://wujiandong.iteye.com/blog/1184921 属性(Attribute)资源:属于整个Android应用资源的一部分.其实就是网上一堆介绍怎么给自定义V ...
- javascript笔记——密码组合规则
//6-16个字符,字母加数字或符号的组合密码[必须全部包含] var filter = /^(?=.*[0-9])(?=.*[a-z])(?=.*[!@#$%^&*])(?=.*[A-Z]) ...