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为素数)取模(涉及到 ...
随机推荐
- Demo学习: FileUpload
FileUpload 文件上传,学习TUniFileUpload控件的使用 TUniFileUpload主要属性: Filter: 文件类型过滤,这个属性在web模式下是无效的,UniGUI目前版本还 ...
- DB2分区表删除和添加分区
1.数据库版本 2.具体procedure DROP PROCEDURE DB2USER.TOOLS_PARTITION_TABLE_SHOW (VARCHAR ()); )) /********** ...
- C# 将Datatable作为参数,传入存储过程
//创建一个静态方法 public static DataSet fnInsertSingleUser(DataTable v_dt, params string[] param) { try { S ...
- IOS 学习参考
IOS 开发 http://code4app.com/ios/%E5%AE%9E%E6%97%B6%E6%9B%B4%E6%96%B0%E7%9A%84%E6%9B%B2%E7%BA%BF%E5%9B ...
- iOS 通览(一) - 技巧、特性及规范
一.编译器特性 1.ARC. ARC是编译器特性.项目中使用了ARC,编译器会在项目编译的时候自动添加OC对象计数器release代码.并且使用了ARC,项目中将不允许出现release.retain ...
- css3 简单界面动画
asdasdasdasda asdasdasdasda
- 在工程中添加pch文件
在Xcode6之前,新建一个工程的时候,系统会帮我们自动新建一个以工程名为名字的pch (precompile header)文件,在开发过程中,可以将那些整个工程都广泛使用的头文件包含在该文件下,编 ...
- Delphi XE5 android 捕获几个事件
以下代码能监控到以下几个事件: FinishedLaunching BecameActive WillBecomeInactive EnteredBackground Wi ...
- 1030: [JSOI2007]文本生成器 - BZOJ
Description JSOI交给队员ZYX一个任务,编制一个称之为“文本生成器”的电脑软件:该软件的使用者是一些低幼人群,他们现在使用的是GW文本生成器v6版.该软件可以随机生成一些文章―――总是 ...
- c++ 异常处理 assert | try
#include <iostream> #include <cassert> using namespace std; int main() { ; assert(i == ) ...