![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数论
理想三旬(づ ̄3 ̄)づ╭~
这个作者很懒,什么都没留下…
展开
-
#10205. 「一本通 6.3 例 3」最大公约数
高精度压位参考博客:压位#include<bits/stdc++.h>using namespace std;const int maxn=1e3+5;int a[maxn],b[maxn],c[maxn],s[maxn],f[maxn],s0=0,p;void init(int a[]){ string s; cin>>s; int l=s.length(); for(int i=0;i<l;i++) { int h=(l-i+3)/4; a[h原创 2022-01-21 10:27:03 · 488 阅读 · 0 评论 -
约数合集(数论)
博客链接:约数合集原创 2022-01-20 22:45:13 · 258 阅读 · 0 评论 -
#10203. 「一本通 6.3 例 1」反素数 Antiprime
参考博客链接:#10203. 「一本通 6.3 例 1」反素数 Antiprime原题来自:POI 2001如果一个大于等于 1 的正整数 n,满足所有小于 n 且大于等于 1 的所有正整数的约数个数都小于 n 的约数个数,则 n 是一个反素数。譬如:1,2,4,6,12,241, 2, 4, 6, 12, 241,2,4,6,12,24,它们都是反素数。请你计算不大于 n 的最大反素数。输入格式一行一个正整数 n。输出格式只包含一个整数,即不大于 n 的最大反素数。样例Input原创 2022-01-20 15:12:26 · 418 阅读 · 0 评论 -
X-factor Chain LibreOJ - 10206
题目描述原题来自 POJ 3421输入正整数 x,求 x的大于 111 的因子组成的满足任意前一项都能整除后一项的序列的最大长度,以及满足最大长度的序列的个数。输入格式多组数据,每组数据一行,包含一个正整数 x。输出格式对于每组数据,输出序列的最大长度以及满足最大长度的序列的个数。样例Input Output23410100 1 11 12 12 24 6题解:算术基本定理:对于任意一个正整数n,可以将它分解成n个质因子的乘积序列的最大长度为a1+a2+原创 2022-01-20 10:25:12 · 399 阅读 · 0 评论 -
质数(数学基础)
质数的筛选1.Eratosthenes筛选法void s(int n){ memset(book,0,sizeof(book)); for(int i=2;i<=n;i++) { if(book[i]) continue; printf("%d ",i);//i是质数 for(int j=i;j<=n/i;j++) book[i*j]=; }}线性筛法int book[maxn],prime[maxn];void s(int n){ memset(原创 2022-01-18 10:06:06 · 269 阅读 · 0 评论 -
快速幂(前三个数,后三个数)
You are given two integers: n and k, your task is to find the most significant three digits, and least significant three digits of nk.InputInput starts with an integer T (≤ 1000), denoting the number of test cases.Each case starts with a line containing原创 2021-06-11 21:10:07 · 328 阅读 · 3 评论 -
分解质因子,欧拉函数,约瑟夫环
分解质因数唯一分解定理:一个数n肯定能被分解成 n = p1{a1}p2{a2}…*pn^{an}. 因为一个数肯定是由合数和质数构成的,合数又可以分解成质数和合数,最后递归下去就会变成质数的乘积。求出数n的因子个数n = p1{a1}p2{a2}…*pn^{an}有一个很简洁的公式:n的因子个数 = (1+a1)(1+a2)…(1+an)题目链接:分解质因数1 #include<stdio.h>int main(){ int n; scanf("%d",&n原创 2021-08-26 11:14:52 · 165 阅读 · 0 评论 -
几种博弈问题及算法
巴什博弈巴什博弈:只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个。最后取光者得胜。显然,如果n=m+1,那么由于一次最多只能取m个,所以,无论先取者拿走多少个,后取者都能够一次拿走剩余的物品,后者取胜。因此我们发现了如何取胜的法则:如果n=(m+1)r+s,(r为任意自然数,s≤m),那么先取者要拿走s个物品,如果后取者拿走k(≤m)个,那么先取者再拿走m+1-k个,结果剩下(m+1)(r-1)个,以后保持这样的取法,那么先取者肯定获胜。总之,要保持给对手留下(m+1)的原创 2021-08-30 09:13:57 · 533 阅读 · 0 评论 -
快速幂(数学基础)
快速幂求(a的b次方%n)int s(int a,int b,int n){ if(b==1) return a; if(b%2==0) { int t=s(a,b/2,n); return t*t%n; } else { int t=s(a,b/2,n); t=t*t%n; t=t*a%n; return t; }}非递归实现int s(int a,int b,int n){ int sum=1; while(b) { if原创 2022-01-18 09:47:59 · 273 阅读 · 0 评论