最简真分数就是分子小于分母且分子分母的最大公约数为1(即无除了1以外的公约数)。
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <string>
#include <cstring>
#include <vector>
#include <stack>
#include <cctype>
#include <climits>
using namespace std;
const int MAXN = 605;
const int INF = INT_MAX;
int GCD(int a, int b){
if(b == 0) return a;
else return GCD(b, a%b);
}
int main(){
// freopen("in.txt", "r", stdin);
int n;
int arr[MAXN];
while(~scanf("%d", &n)){
if(n == 0) break;
for(int i = 0; i < n; i++){
scanf("%d", &arr[i]);
}
sort(arr, arr+n);
int ans = 0;
for(int i = 0; i < n; i++){
for(int j = i+1; j < n; j++){
if(GCD(arr[i], arr[j]) == 1) ans++;
}
}
printf("%d\n", ans);
}
return 0;
}
素数筛模板题。
编译器吃不消1000000^2的数据,但是oj评测系统吃得消,所以这题告诉我们oj的内存要远大于编译器。
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <string>
#include <cstring>
#include <vector>
#include <stack>
#include <cctype>
#include <climits>
using namespace std;
const int MAXN = 1000005;
const int INF = INT_MAX;
bool isPrime[MAXN];
vector<int> prime;
void Initial(){
for(int i = 2; i < MAXN; i++){
isPrime[i] = true;//打假
}
for(int i = 2; i < MAXN; i++){
if(!isPrime[i]) continue;
prime.push_back(i);
for(int j = i*i; j < MAXN; j += i){
if(isPrime[j]) isPrime[j] = false;
}
}
}
int main(){
// freopen("in.txt", "r", stdin);
int k;
Initial();
while(~scanf("%d", &k)){
printf("%d\n", prime[k-1]);
}
return 0;
}