zoj3707(Calculate Prime S)解题报告
1.计算(a/b)%c,其中b能整除a
设a=b*r=(bc)*s+b*t
则(b*t)为a除以bc的余数
r=c*s+t
而
(a/b)%c=r%c=t
(a%bc)/b=(b*t)/b=t
所以对于b与c互素和不互素都有(a/b)%c=(a%bc)/b成立。
当bc不大时,先取模bc,再除b
如果b与c互素,则(a/b)%c=a*b^(phi(c)-1)%c
待证
2.与集合子集
斐波那契数列的第n+2项同时也代表了集合{1,2,...,n}中所有不包含相邻正整数的子集个数。
证明:归纳法证明——
n=1时,相应子集个数为2,为f(3);
n=2时,相应子集个数为3,为f(4);
n>=3时,若集合{1,2,...,n-2}的相应子集为f(n),集合{1,2,...,n-1}的相应子集为f(n-1)
则对于集合{1,2,...,n}:
包含n的子集(即不包含n-1,在最大项可以为n-2的子集基础上加上数字n)个数为f(n)
不包含n的子集个数为f(n+1)(最大项可以为n-1的子集)
所以集合{1,2,...,n}的相应子集为f(n)+f(n+1)=f(n+2)
所以得证
3.gcd(fib(n),fib(m))=fib(gcd(n,m))
证明:http://www.cnblogs.com/cmyg/p/6618893.html
当一个数n与其它数m的最大公约数为为1或2时,则fib(n)和fib(m)的最大公约数为fib(1)或fib(2),为1。
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <malloc.h>
#include <memory.h> #define ansnum 20000000
#define anszhi 2000000 struct node
{
long long mat[][];
};
long *zhi;
bool *vis;
long yu; void Prime()
{
long i,j,ans=;
memset(vis,true,sizeof(bool)*ansnum);
for (i=;i<ansnum;i++)
{
if (vis[i])
{
ans++;
zhi[ans]=i;
}
for (j=;j<=ans;j++)
{
if (i*zhi[j]>=ansnum)
break;
vis[i*zhi[j]]=false;
if (i%zhi[j]==)
break;
}
}
zhi[]=;
zhi[]=;
} struct node count_mat(struct node a,struct node b)
{
long i,j;
struct node c;
for (i=;i<;i++)
for (j=;j<;j++)
c.mat[i][j]=(a.mat[i][]*b.mat[][j]
+a.mat[i][]*b.mat[][j])%yu;
return c;
} long fib(long t)
{
struct node m,r;
m.mat[][]=;
m.mat[][]=;
m.mat[][]=;
m.mat[][]=; r.mat[][]=;
r.mat[][]=;
r.mat[][]=;
r.mat[][]=;
t--;
while (t)
{
if ((t & )==)
r=count_mat(r,m);
t>>=;
m=count_mat(m,m);
}
return (r.mat[][]+r.mat[][])%yu;
} int main()
{
vis=(bool *) malloc (sizeof(bool)*ansnum);
zhi=(long *) malloc (sizeof(long)*anszhi);
long n,k,x,m,i,j;
Prime();
scanf("%ld",&n);
for (i=;i<=n;i++)
{
scanf("%ld%ld%ld",&k,&x,&m);
yu=x;
for (j=zhi[k];;j++)
if (fib(j)==)
break;
yu=x*m;
printf("%ld\n",fib(j)/x);
}
return ;
}
/*
5
5 13 10
1 11 3
5 2 5
5 5 6
1000000 100 1000000
*/
zoj3707(Calculate Prime S)解题报告的更多相关文章
- 【九度OJ】题目1040:Prime Number 解题报告
[九度OJ]题目1040:Prime Number 解题报告 标签(空格分隔): 九度OJ 原题地址:http://ac.jobdu.com/problem.php?pid=1040 题目描述: Ou ...
- POJ 3126 Prime Path 解题报告(BFS & 双向BFS)
题目大意:给定一个4位素数,一个目标4位素数.每次变换一位,保证变换后依然是素数,求变换到目标素数的最小步数. 解题报告:直接用最短路. 枚举1000-10000所有素数,如果素数A交换一位可以得到素 ...
- USACO Section1.5 Prime Palindromes 解题报告
pprime解题报告 —— icedream61 博客园(转载请注明出处)--------------------------------------------------------------- ...
- USACO Section1.3 Prime Cryptarithm 解题报告
crypt1解题报告 —— icedream61 博客园(转载请注明出处)--------------------------------------------------------------- ...
- poj 2739 Sum of Consecutive Prime Numbers 解题报告
题目链接:http://poj.org/problem?id=2739 预处理出所有10001以内的素数,按照递增顺序存入数组prime[1...total].然后依次处理每个测试数据.采用双重循环计 ...
- USACO Section 1.3 Prime Cryptarithm 解题报告
题目 题目描述 牛式的定义,我们首先需要看下面这个算式结构: * * * x * * ------- * * * <-- partial product 1 * * * <-- parti ...
- USACO Section 1.5 Prime Palindromes 解题报告
题目 题目描述 题目就是给定一个区间[a,b]((5 <= a < b <= 100,000,000)),我们需要找到这个区间内所有既是回文串又是素数的数字. 输入样例 5 500 ...
- 「HDU3823」 Prime Friend 解题报告
Prime Friend Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- POJ 2002 Squares 解题报告(哈希 开放寻址 & 链式)
经典好题. 题意是要我们找出所有的正方形.1000点,只有枚举咯. 如图,如果我们知道了正方形A,B的坐标,便可以推测出C,D两点的坐标.反之,遍历所有点作为A,B点,看C,D点是否存在.存在的话正方 ...
随机推荐
- Onezero团队第三次站立会议随感
>首先这是一个关于Android的小应用APP(记账本) >在Java基础薄弱的基础上尝试Android开发,让我感觉力不从心. >说实话本迭代周在程序设计,确实让我头疼,不知道怎么 ...
- 12.9 Daily Scrum
在一些实现上,开发人员提出了意见,经过讨论后,我们决定取消“推荐餐厅”的功能,增加了“菜谱分类”的功能. 同时更新了相关人员的任务. Today's Task Tomorrow's Task 丁辛 ...
- Linux内核分析作业 NO.7
可执行程序的装载 于佳心 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 实 ...
- 我的github地址 https://github.com/1010de/Test.git
构建之法老师叫交下任务学习github,经过一段时间的学习和了解,看介绍.看视频.看博客.初步认识到github的方便与好处. 自己试着去注册和使用github,已经慢慢学会了一些基本操作. ...
- [2017BUAA软工]个人项目
软工个人项目 一.Github项目地址 https://github.com/Lydia-yang/2017BUAA-SoftwareEngineering 二.解题思路 在刚开始拿到题目的时候,关于 ...
- JavaScript(ECMAScript) with 语句
有同事,爱尝鲜,JavaScript ECMAScript with 语句,找了半天不知道局部变量的出处,原来是with语句搞得鬼. http://www.w3school.com.cn/js/pro ...
- mysql常用增删改查命令(纯纪录.orm用得基本功都没了。)
更新表数据: update table_name set xxx=xxx where condition; 增加字段: alter table table_name add field type ot ...
- 关于miniconda的安装,配置以及包批量安装和使用
由于时间很晚了.就不写废话了. conda官方文档地址:http://conda.pydata.org/docs/ 一切其实都可以从miniconda的文档找到,这里只纪录自己操作的时候遇到的值得一说 ...
- 2.18比赛(T2,T3留坑)
2.18比赛(T2,T3留坑) pdf版题面 pdf版题解 超越一切(ak) [题目描述] 夏洛可得到一个(h+1)×(w+1)的巧克力,这意味着她横着最多可 以切 h 刀,竖着最多可以切 w 刀 她 ...
- SQL 从一个表读取数据存到另一个表
原来没有的创建的表select * into 表A form 表B where条件 原来存在的表insert into 表A select * from 表B where 条件 INSERT INTO ...