1.同模余定理
求S(n)
题目描述
Time Limit: 1000 ms
Memory Limit: 256 mb
S(n)=n^5
求S(n)除以3的余数
输入描述:
每行输入一个整数n,(0 < n < 1000000)
处理到文件结束
输出描述:
输出S(n)%3的结果并换行
代码
#include <stdio.h>
int main() {
long long int n;
while (scanf("%lld", &n) != EOF) {
long long int s = n;
for (int i = 1; i < 5; i++) {
s = (n % 3)*(s % 3);
}
s = s % 3;
printf("%lld\n", s);
}
return 0;
}
大数取模
#include <stdio.h>
char s[1005];
int main(){
int m,n;//m为输出值,n为模数
while(scanf("%d %d",&m,&n)){
for(int i=0;i<n;i++){
m = ((m*10)%n+(s[i]-'0')%10)%10;
}
printf("%d\n",m);
}
retrun 0;
}
2. 最大公约数(GCD)
#include <stdio.h>
int gcd(int a,int b){
if (b == 0)
return a;
else
return gcd(b,a%b);
}
int main(){
int x,y;
cin>> x>>y;
cout<<gcd(x,y)<<endl;
return 0;
}
或者直接使用__gcd()
#include <stdio.h>
#include <algorithm>
#include <iostream>
using namespace std;
int main(){
int x,y;
cin>> x>>y;
cout<<__gcd(x,y)<<endl;
return 0;
}
例题,最简真分数
题目描述
Time Limit: 1000 ms
Memory Limit: 32768 mb
给出n个正整数,任取两个数分别作为分子和分母组成最简真分数,编程求共有几个这样的组合。
输入描述:
每组包含n(n<=600)和n个数,整数大于1且小于等于1000。
输出描述:
每行输出最简真分数组合的个数。
代码
#include <stdio.h>
int gcd(int a,int b) {
if (b == 0)
return a;
else
return gcd(b, a%b);
}
int a[605];
int main() {
int n;
while (scanf("%d", &n) != EOF) {
for (int i = 0; i < n; i++) {
scanf("%d",&a[i]);
}
int sum = 0;
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n;j++) {
if (gcd(a[i], a[j]) == 1)
sum++;
}
}
printf("%d\n",sum);
}
return 0;
}
最大公约数1
题目描述
Time Limit: 1000 ms
Memory Limit: 256 mb
读入n个正整数,求出这n个数的最小值、最大值以及它们两的最大公约数,并输出。输入中第一行为n,接下来为n个大于零的整数。
输入描述:
第一行为n。第二行是n个大于零的整数,用空格隔开。
输出描述:
分别输出最小值、最大值和它们两的最大公约数,用空格隔开。
代码
#include <stdio.h>
#include <string>
#include <map>
#include <algorithm>
#include <iostream>
//#include <numeric>
//#include <bits/stdc++.h>
using namespace std;
int gcd(int a, int b) {
if (b == 0) return a;
else return gcd(b, a%b);
}
int a[1005];
int main() {
int n;
while (scanf("%d",&n)!=EOF) {
for (int i = 0; i < n; i++) {
scanf("%d",&a[i]);
}
sort(a,a+n);
printf("%d %d %d",a[0],a[n-1],gcd(a[0],a[n-1]));
}
return 0;
}
3.递归
例子
int sum(int x) {
if (x == 1) return 1;
return x + sum(x-1);
}
int main() {
cout << sum(10) << endl;
return 0;
}
例子:斐波那契数列