门户网站开发要求,如何搭建asp网站,安康市滴滴公司地址,最新seo视频教程素数 有些人认为一个人一生中有三个周期#xff0c;从他或她出生的那一天开始。
这三个周期是身体周期#xff0c;情感周期的和智力的周期#xff0c;他们有周期的长度为23#xff0c;28#xff0c;
和33天。每一个周期都有一个高峰。在一个周期的高峰期#xff0c;
一个…素数 有些人认为一个人一生中有三个周期从他或她出生的那一天开始。
这三个周期是身体周期情感周期的和智力的周期他们有周期的长度为2328
和33天。每一个周期都有一个高峰。在一个周期的高峰期
一个人在他/她在相应的领域身体情绪或精神。
例如如果它是心理曲线思维过程会更清晰和集中会更容易。
由于三个周期有不同的周期所以这三个周期的峰值一般发生在不同的时间。
我们想确定何时发生绝对高潮所有三个周期的峰值发生在同一天。
因为处于绝对高潮时人各方面均表现优异因此人们想知道绝对高潮在哪一天出现。
对身体周期情绪周期和智力周期给出本年内他们各自的一个高潮日不一定是第一个后经过的天数pei。另外给出本年内已经经过的天数d(d0).求出在d所代表的日期多少天后
三种周期的高潮日又一次在同一天出现。输入输入数据有多组每组测试数据占一行有四个整数p,e,i和d. p,e,i 分别代表从0开始计时身体周期情感周期和智力周期首次出现高潮的日期要求编程计算经过d后多少天第一个绝对高潮出现输入保证绝对高潮在21252内的某一天出现。输入以-1-1-1结束。输出例如Case 1: the next triple peak occurs in 1234 days.23 28 33
d1 d2 d3d123k1x
d228k2x
d333k3xx≡d1 %23≡d2 %28≡d3 %33//延续上体的解题方法
//逐级合并法
xa1(%m1)a2(%m2)a3(%m3)
xa1m1y1 (1)
xa2m2y2
m1y1-m2y2a2-a1这是一个线性方程可解出y1 linearEquation(m1,m2,a2-a1)带回1.得特解x0a1m1*y1--xx0k*lcm(m1,m2)得一个新方程//lcm(m1,m2)m1,m2得公倍数x≡x0 (%lcm(m1,m2))形成新的a(x0),新的m(lcm(m1,m2))public static void main(String[] args)throws Exceeption{Scanner sc new Scanner(System.in);int t1;Listlong[] aListnew ArrayListlong[]();Listlong dListnew ArrayListlong();while(sc.hasNext()){long[] a{sc.nextLong(),sc.nextLong(),sc.Long()};long dsc.nextLong();if(a[0]-1a[1]-1a[2]-1d-1)break;else{aList.add(a);aList.add(d);}}for(int i0;iaList.size();i){long[] aaList.get(i);long ddList.get(i);long[] m{23,28,33};long resCase05_ExtGcd.linearEquationGroup(a,m);while(resd){res21252;//保证在21252内就是以21252为模}System.out.println(Case(t): the next triple peak occurs in(res-d)days);}} 埃式筛法 public static void mian(){long nowSystem.currentTimeMillis();m1(100000);System.out.println(”耗时“(System.currentTimeMillis()-now)ms );
}private static void m1(int N){//N是第N个素数//已知在整数X内大概有x/log(X)个素数//现在我们要逆推要想求第N个素数我们的整数范围是社么//length就是整数范围int n2;while(n/log(n)N){//n个数中大概有n/log(n)个素数n;}//开辟一个数组下标是自然数值是标记//基本思路是筛选法把非素数标记出来//int[] arrnew int[n];int x2;while(xn){//标记过了。继续下一个if(arr[x]!0){continue;}int k2;//对每个x我们都从2倍开始对x的k倍全部标记-1while(x*kn){arr[x*k]-1;k;}x;}//System.out,println(arr);//筛完之后这个很长的数组里面非素数下标对应的值都是-1int sum0;for(int i2;iarr.length;i){//是素数计数1if(arr[i]0){sum;}if(sumN){System.out,println(i);}}
}快速幂 反复平方
a^10 8 0 2 01 0 1 0
a^(2^3) a^(2^2) a^(2^1) a^(a^0);将次方转成二进制哪一位有1就乘以那一位所在的a的平方值
如 a^10a^(2^3)*a(2^1)public static long ex2(long n,long m){long primeFangShu n;//n的1次方long result1;while(m!0){if((m1)1){result*pingFangShu;//每移位一次幂累成方一次pingFangShupingFangShu*pingFangShu;//无论等不等于1次方都成倍乘//右移一位m1;}return result;}}斐波那契与矩阵幂运算 (f1.f2)(1,1)(f1,f2)*[0 1][f2.f3] //011f1,112f3f1f2[1 1](f1.f2)*[0 1]^2[f3,f4][1 1]....递推[f1,f2]*[0 1]^n-1[fn,fn1][1 1]public static long fib(long n){if(n1||n2)return1;long[][] matrix{{0,1},{1,1}};long[][] resUtil.matrixPower(matrix,n-1);//矩阵的乘方resUtil.matrixMultiply(new long[][]{(1,1)},res);//矩阵的乘方与f1f2相乘return res[0][0];}public long[][] matrixPower(long[][] matrix,long p){//初始化结果为单位矩阵对角线为1
long[][] resultnew long[matrix.length][matrix[0].length];
//单位矩阵。相当于整数的1for(int i0;iresult.length;i){result[i][i]1;}//平方数
long[][] pingFangmatrix;//一次方for(;p!0;p){while(p!0){if((p1)!0){//当前二进制最低位1将当前平方数乘到结果中resultmatrixMultiply(result,pingFang);}平方数继续上翻pinFangmatrixMultiply(pingFang,pingFang);p1;}return result;
}}