随笔分类 - 数论
摘要:import java.util.Scanner;/** * 分析: 假设数组uglyArr[NMAX]中存放不断产生的丑数,开始时只有一个丑数uglyArr[0]=1,由此出发, * 下一个丑数由2、3、5竞争产生,得到uglyArr[0]*2、uglyArr[0]*3、uglyArr[0]*5, * 显然最小的那个数就是新的丑数,所以第2个丑数uglyArr[1]=2;接着进行新一轮的竞争 , * 由于上一轮竞争中,因子2获胜,这时因子2应该乘以uglyArr[1]才显得公平, * 故有uglyArr[1]*2、uglyArr[0]*3、uglyArr[0]*5,此时因子3获胜 * ,故u
阅读全文
摘要:题意很简单,就是给你一个数组大小为n的值从1到n,之后有m次操作,要么修改前面的数组中的某一项,要么是输出从x到y(包括边界)中的数与p互质的数的和。由于m很小(m<=1000)故,将修改的部分保存下来之后统计输出时,在判断修改的部分是否与p互质,若是要修改原来的,在修改现在的。注意,就是多次修改同一个地方,只记录最后一次。对于统计从x到y的与p互质数的和,有结果=数1到y的满足要求的结果-数1到x-1的满足要求的结果。而从1开始到n的数中与p互质的数的和的求法,就是个容斥原理的算法。剔除p中单个素因子的倍数,加上两个因子的倍数,接着在剔除三个素因子的倍数,直到所有的素因子结束。。/**
阅读全文
摘要:利用矩阵法求f(n),其中f(n)=3*f(n-1)+f(n-2) f(0)=0,f(1)=1接着就是求循环节,即可。求循环节:#include<iostream>#include<stdio.h>using namespace std;typedef long long LL;const LLMOD = 1000000007LL;int main() { LL f0 = 0, f1 = 1, temp = -1; for (LL i = 1;; i++) { temp = (3 * f1 + f0) % MOD; f0 = f1; f1 ...
阅读全文
摘要:/** * 和为n的连续正数列 * 定义序列start=1,end=2,当和sum大于n时,则先将和sum减去最小的start,并移动start++,若是小于n,则sum+=end * ,end++,若是等于则输出[start,end],并使sum加上end,++end * * @param n */ public static void sequenceN(int n) { int start = 1, end = 2, mid = (n + 1) / 2, sum = start + end; while (start < mid) { if (sum > n) { ...
阅读全文
摘要:题目思路:求解10^x = 1 (mod 9*L/gcd(L,8))的满足x>0的最小解就是答案由8构成的数A设有x位那么A=8(10^0+10^1+...+10^(x-1));很容易得到A=(8/9)*(10^x-1);题目的要求就是A=0(mod L)就是(8/9)*(10^x-1)=0(mod L);->8*(10^x-1)=0(mod 9L);->10^x-1=0(mod 9L/gcd(L,8));->10^x =1 (mod 9L/gcd(L,8));令p=9*L/gcd(L,i), 等价于10^x==1(mod p),求满足条件的最小的整数x看到这个式子,我
阅读全文

浙公网安备 33010602011771号