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为素数)取模(涉及到 ...
随机推荐
- liger 的 ligerDialog 的使用。
/// 查看页面,跳出一个新的添加窗口 function AddMessage() { $.ligerDialog.open({ url: UrlAddMessage, height: , width ...
- String类源码分析(JDK1.7)
以下学习根据JDK1.7String类源代码做注释 public final class String implements java.io.Serializable, Comparable<S ...
- Kakfa揭秘 Day9 KafkaReceiver源码解析
Kakfa揭秘 Day9 KafkaReceiver源码解析 上一节课中,谈了Direct的方式来访问kafka的Broker,今天主要来谈一下,另一种方式,也就是KafkaReceiver. 初始化 ...
- Android类库常用类库一览
在Android SDK中包括很多包文件,通过了解这些包的功能也有助于了解可以开发的功能. 在Android类库中,各种包写成android.*的方式,重要包的描述如下所示: android.app ...
- 域名转化到IP地址的实现
在linux中,有一些函数可以实现主机名和地址的转化,最常见的有gethostbyname().gethostbyaddr()等,它们都可以实现IPv4和IPv6的地址和主机名之间的转化.其中geth ...
- SPFA&邻接表 PASCAL
题目来自CODE[VS]-->热浪 1557 热浪 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 钻石 题目描述 Description 德克萨斯纯朴的民眾们这个 ...
- Java中“||”与“|”的区别
两者都是或,但是不一样.举个例实例给你看你就明白了: int i=0;if(3>2 || (i++)>1) i=i+1;System.out.println(i); 这段程序会打印出1,而 ...
- Weblogic12c安装与配置详解
Weblogic是什么Weblogic的安装Weblogic创建域Weblogic管理域Weblogic的应用Weblogic是什么 Weblogic这是我入职以后第一次接触到的词汇,我很陌生,就从我 ...
- mysql-community-server 5.7.16 设置密码
那是由于mysql-community-server 5.7的密码是一个默认的随机密码,这个初始密码,mysql又不告诉你,我们需要重设这个密码. service mysqld stop mysqld ...
- maven+tomcat6-maven-plugin实现热部署及调试
maven project,特别是maven module项目默认情况下是是无法直接通过tomcat等容器部署的,如图,我要部署fastdev_web这个maven module,可以看出在tomca ...