Johny likes numbers n and k very much. Now Johny wants to find the smallest integer x greater than n, so it is divisible by the number k.
The only line contains two integers n and k (1 ≤ n, k ≤ 109).
Print the smallest integer x > n, so it is divisible by the number k.
5 3
6
25 13
26
26 13
39
题意:找到一个大于n并且被k整除的最小的数;
思路:除+1;
#include<bits/stdc++.h> using namespace std; #define ll __int64 #define mod 1000000007 #define pi (4*atan(1.0)) const int N=1e3+10,M=1e6+10,inf=1e9+10; int main() { int x,y,z,i,t; scanf("%d%d",&x,&y); printf("%I64d ",(ll)(x/y+1)*y); return 0; }
The girl Taylor has a beautiful calendar for the year y. In the calendar all days are given with their days of week: Monday, Tuesday, Wednesday, Thursday, Friday, Saturday and Sunday.
The calendar is so beautiful that she wants to know what is the next year after y when the calendar will be exactly the same. Help Taylor to find that year.
Note that leap years has 366 days. The year is leap if it is divisible by 400 or it is divisible by 4, but not by 100(https://en.wikipedia.org/wiki/Leap_year).
The only line contains integer y (1000 ≤ y < 100'000) — the year of the calendar.
Print the only integer y' — the next year after y when the calendar will be the same. Note that you should find the first year after y with the same calendar.
2016
2044
2000
2028
50501
50507
Today is Monday, the 13th of June, 2016.
题意:找到这年之后日历相同的年份;
思路:天数整除7并且是同是闰年或平年;
#include<bits/stdc++.h> using namespace std; #define ll __int64 #define mod 1000000007 #define pi (4*atan(1.0)) const int N=1e3+10,M=1e6+10,inf=1e9+10; int check(int x) { if((x%4==0&&x%100!=0)||x%400==0) return 366; return 365; } int main() { int x,y,z,i,t; scanf("%d",&x); int ans=0; for(i=x;;i++) { ans+=check(i)%7; if(ans%7==0&&(check(x)==check(i+1))) break; } cout<<i+1<<endl; return 0; }
Little Joty has got a task to do. She has a line of n tiles indexed from 1 to n. She has to paint them in a strange pattern.
An unpainted tile should be painted Red if it's index is divisible by a and an unpainted tile should be painted Blue if it's index is divisible by b. So the tile with the number divisible by a and b can be either painted Red or Blue.
After her painting is done, she will get p chocolates for each tile that is painted Red and q chocolates for each tile that is painted Blue.
Note that she can paint tiles in any order she wants.
Given the required information, find the maximum number of chocolates Joty can get.
The only line contains five integers n, a, b, p and q (1 ≤ n, a, b, p, q ≤ 109).
Print the only integer s — the maximum number of chocolates Joty can get.
Note that the answer can be too large, so you should use 64-bit integer type to store it. In C++ you can use the long long integer type and in Java you can use long integer type.
5 2 3 12 15
39
20 2 3 3 5
51
题意:1-n中每个整除a的数可以得到p;1-n中每个整除b的数可以得到q;
问最多可以得到多少;
思路:简单的容斥;
#include<bits/stdc++.h> using namespace std; #define ll __int64 #define mod 1000000007 #define pi (4*atan(1.0)) const int N=1e3+10,M=1e6+10,inf=1e9+10; ll gcd(ll x,ll y) { return y==0?x:gcd(y,x%y); } int main() { int x,y,z,i,t; ll n,a,b,p,q; scanf("%I64d%I64d%I64d%I64d%I64d",&n,&a,&b,&p,&q); ll aa=n/a; ll bb=n/b; ll ans=aa*p+bb*q; ll lcm=a*b/gcd(a,b); ans-=n/lcm*min(p,q); printf("%I64d ",ans); return 0; }
Consider a linear function f(x) = Ax + B. Let's define g(0)(x) = x and g(n)(x) = f(g(n - 1)(x)) for n > 0. For the given integer values A, B,n and x find the value of g(n)(x) modulo 109 + 7.
The only line contains four integers A, B, n and x (1 ≤ A, B, x ≤ 109, 1 ≤ n ≤ 1018) — the parameters from the problem statement.
Note that the given value n can be too large, so you should use 64-bit integer type to store it. In C++ you can use the long longinteger type and in Java you can use long integer type.
Print the only integer s — the value g(n)(x) modulo 109 + 7.
3 4 1 1
7
3 4 2 1
25
3 4 3 1
79
思路:赤裸裸的矩阵快速幂;
#include<bits/stdc++.h> using namespace std; #define ll __int64 #define mod 1000000007 #define pi (4*atan(1.0)) const int N=1e3+10,M=1e6+10,inf=1e9+10; struct is { ll a[10][10]; }; ll x,m,k,c; is juzhenmul(is a,is b,ll hang ,ll lie) { int i,t,j; is ans; memset(ans.a,0,sizeof(ans.a)); for(i=1;i<=hang;i++) for(t=1;t<=lie;t++) for(j=1;j<=lie;j++) { ans.a[i][t]+=(a.a[i][j]*b.a[j][t]); ans.a[i][t]%=mod; } return ans; } is quickpow(is ans,is a,ll x) { while(x) { if(x&1) ans=juzhenmul(ans,a,2,2); a=juzhenmul(a,a,2,2); x>>=1; } return ans; } int main() { int y,z,i,t; ll a,b,n,x; scanf("%I64d%I64d%I64d%I64d",&a,&b,&n,&x); is base; base.a[1][1]=a; base.a[1][2]=0; base.a[2][1]=b; base.a[2][2]=1; is ans; memset(ans.a,0,sizeof(ans.a)); ans.a[1][1]=1; ans.a[2][2]=1; ans=quickpow(ans,base,n); printf("%I64d ",(x*ans.a[1][1]+ans.a[2][1])%mod); return 0; }