NOI2002robot
这题又是纯数论题……
独立数就是欧拉函数,政客和军人的含义已经说的很清楚了,学者是最多的……
首先,如果我们知道了政客和军人的答案,那就只要用n的所有因子的欧拉函数值减去这两个值,然后取模就行了。
但一个数的因子有很多,而且题目中给的数据范围又颇大,所以我们想肯定有什么方法可以快速推出一个数的所有因子的欧拉函数值之和。
经过思考,我们有如下结论:

因为对于一个素数来说,phi(p的n次方)=p的(n-1)次方*(p-1)
这是因为这些式子拆开之后每一项都对应着一个因子的欧拉函数值,不重不漏。
接下来考虑,如何计算政客和军人
其实我在数学竞赛书上看过这一题……(给定一个集合及其中的所有元素,求它的所有奇子集的元素乘积之和和偶子集的元素乘积之和……)
其实这和上面的方法类似
设偶子集之和为A,奇子集之和为B。
(在此题中认为1既不是政客也不是军人)
S1=(1+X1)*(1+X2)*(1+X3)……(1+Xn)-1
展开之后每一项都对应一个子集乘积,所以A+B=S1
S2=(1-X1)*(1-X2)*(1-X3)……(1-Xn)-1
展开之后奇子集乘积符号为负,偶子集符号为正。所以A-B=S2
所以A=(S1+S2)除以2
B=S1-A
但需要注意的是,因为要对答案取模,所在计算过程中直接mod10000是不够的,因为涉及了除法。所以要多保留一位,在计算过程中mod100000,最后输出mod10000
至此,此题完美解决。
代码:(在wikioi上AC,在bzoj上WA,奇了怪了……)‘
var ans1,ans2,ans3,p,e,n,t:int64;
i:longint;
function mo(x:int64):longint;
begin
mo:=((x mod )+) mod ;
end;
function power(num,times:longint):longint;
var tmp:longint;
begin
if times= then exit(mo(num));
tmp:=power(num,times>>);
power:=mo(tmp*tmp);
if times and = then power:=mo(power*num);
end;
procedure main;
begin
readln(n);
ans1:=;ans2:=;ans3:=;
for i:= to n do
begin
readln(p,e);
ans3:=mo(ans3*power(p,e));
if p= then continue;
ans1:=mo(ans1*(+p-));
ans2:=mo(ans2*(-p+));
end;
if n= then
begin
ans1:=;
if p<> then ans2:=p- else ans2:=;
ans3:=mo(ans3--ans1-ans2);
exit;
end;
ans1:=mo(ans1-);ans2:=mo(ans2-);ans3:=mo(ans3-);
t:=ans1;ans1:=mo(ans1+ans2)>>;ans2:=mo(t-ans1);ans3:=mo(ans3-ans1-ans2);
end;
procedure print;
begin
writeln(ans1 mod );
writeln(ans2 mod );
writeln(ans3 mod );
end;
begin
main;
print;
end.
NOI2002robot的更多相关文章
- HNOI2008Cards
看了一下polya和burnside定理,感觉还行(就是不会证……) 这题用的是burnside ans=在每个置换群下不动的方案数之和除以置换数 这题有个难点在取模 关于对p(p为素数)取模(涉及到 ...
随机推荐
- 巧用system函数个性化屏幕显示
函数名:system 功 能: 发出一个DOS命令 用 法: system("DOS命令"); (system函数需加头文件<stdlib.h&g ...
- C#网络编程(1)
1.Purpose 1.什么是网络编程 2.TCP/IP协议 3.什么是套接字 4.多线程深入理解 二.Basic Concept 1.网络编程:主要实现进程(线程)相互之间的通信和基本的网络应用原理 ...
- SQL Server 2008 的gis函数
居然不知道sql有gis函数,孤陋寡闻了 https://msdn.microsoft.com/zh-cn/library/bb933904.aspx STContains(geometry 数据 ...
- 【ibatis】cachemodel、属性 及特殊配置
http://www.cnblogs.com/13590/archive/2013/03/01/2938126.html <?xml version="1.0" encodi ...
- WP8.1和Win8.1的不同之处
本文仅是个人见解,如有不足或错误之处欢迎批评指正~ 1.Toast: 创建Toast代码差不多但实现机制及管理上不一样 2.ApplicationData: WP8.1多了一个LocalCacheFo ...
- doc下批处理文件的感想
这段时间忙着为我们的爬虫程序做一个守护进程,想来想去还是用脚本比较好,所以用了点时间仔细的研究了一下,这里有一点点经验想分享给大家,也不能说是经验了,只能说是我写这个的时候所用到的知识: 1.task ...
- Android Studio 单刷《第一行代码》系列 07 —— Broadcast 广播
前情提要(Previously) 本系列将使用 Android Studio 将<第一行代码>(书中讲解案例使用Eclipse)刷一遍,旨在为想入坑 Android 开发,并选择 Andr ...
- ServiceStack.Redis
什么是Redis 首先,简述一下什么是Redis. Redis是一个开源.支持网络.基于内存.键值对存储数据库,使用ANSI C编写.从2013年5月开始,Redis的开发由Pivotal赞助.在这之 ...
- Flex 调用webService
今天手头没事,就学习下 Flex 调用webService的方法.本地测试OK 和大家分享下. ——————————————————————————————————————————————————— ...
- What the hell is Rotate?