// PATn.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include<iostream>
#include<string>
#include<vector>
#include<cmath>
using namespace std;
double get_value(string &s)
{
if (s.find("/") != string::npos)
{
auto i = s.find("/");
double s_n = stod(s.substr(0, i));
double s_m = stod(s.substr(i + 1, string::npos));
return (s_n / s_m);
}
else
throw("Error");
}
bool check(int a, int b)
{
bool flag = true;
for (int i = 2; i <= a; ++i)
{
if ((a%i) == 0)
{
if ((b%i) == 0)
flag = false;
}
}
return flag;
}
int main()
{
string s1, s2, s3;
cin >> s1 >> s2 >> s3;
double d1 = get_value(s1);
double d2 = get_value(s2);
if (d2 < d1)
{
double tmp = d1;
d1 = d2;
d2 = tmp;
}
double m = stod(s3);
vector<double> n;
double min = floor(d1*m)+1; //d*m,算出来的就是n的范围()!
double max =ceil(d2*m); //double转int,小数部分直接被丢弃!若使用ceil,1.0转换为1.0!
for (double n_tmp = min; n_tmp < max; ++n_tmp)
{
if (check(n_tmp, m) &&(n_tmp/m)!=d1 && (n_tmp/m)!=d2)
n.push_back(n_tmp);
}
for (size_t i = 0; i < n.size(); ++i)
{
cout << n[i] << "/" << m;
if (i != (n.size() - 1))
cout << " ";
}
system("pause");
return 0;
}
网友评论