1108:
#include<iostream>
using namespace std;
int gcd(int n,int m){
int r=n%m;
while(r!=0){
n=m;m=r;r=n%m;
}
return m;
}
int main(){
int N,M;
while(cin>>N>>M)
cout<<N/gcd(N,M)*M<<endl;
return 0;
}
2138:
#include<iostream>
#include<math.h>
using namespace std;
bool isprime(int n){
for(int i=2;i<=sqrt(n);i++)
if(n%i==0)
return 0;
return 1;
}
int main(){
int n;
while(cin>>n){
int count=0;
int *a=new int [n];
for(int i=0;i<n;i++)
cin>>a[i];
for(int i=0;i<n;i++)
if(isprime(a[i]))
count++;
cout<<count<<endl;
}
return 0;
}
1713:分数的最小公倍数求法:
分子 = 两分数 分子的最小公倍数
分母 = 两分数 分母的最大公约数
#include<iostream>
using namespace std;
long gcd(long long n,long long m){//最大公约数
if(n%m==0)return m;
else
return gcd(m,n%m);
}
long long gbs(long long n,long long m){//最小公倍数
return n/gcd(n,m)*m;
}
int main(){
int n;
cin>>n;
while(n--){
long long a1,a2,b1,b2;
char u;
cin>>a1>>u>>a2>>b1>>u>>b2;
long long p,q;
p=gcd(a1,a2);q=gcd(b1,b2);//要有赋值这一步,否则通过不了(不懂)
a1=a1/p;//化最简分子分母
a2=a2/p;
b1=b1/q;
b2=b2/q;
long long z,m;
z=gbs(a1,b1);//分数的最小公倍数的求法
m=gcd(a2,b2);
if(z%m==0)cout<<z/m<<endl;
else
cout<<z<<"/"<<m<<endl;
}
return 0;
}
1722:求两数之和与最大公约数的差
#include<iostream>
using namespace std;
int gcd(int n,int m){
if(n%m==0)return m;
return gcd(m,n%m);
}
int main(){
int N,M;
while(cin>>N>>M){
cout<<N+M-gcd(N,M)<<endl;
}
return 0;
}
2504:
#include<iostream>
using namespace std;
int gcd(int N,int M){
if(N%M==0)return M;
return gcd(M,N%M);
}
int main(){
int n;
cin>>n;
int a,b;
while(cin>>a>>b){
for(int c=2*b;c<=a;c+=b)//C只能是b的倍数
if(gcd(a,c)==b)
{
cout<<c<<endl;
break;
}
}
return 0;
}
1717:循环小数转分数2!!!
(百度可以查到相关的小数转分数三种情况的转换方法)
刚好就是所给样例输入的三种分数形式,(注意 0.(4) 这个小数不是指括号中只有一个数,还可以是 0.(452) 等等)其他一步步来应该是可以很简单一遍过的
(菜鸟一枚,代码内容毫无跨度,放心食用)
#include<iostream>
#include<string>
using namespace std;
long long gcd(long long N,long long M){
return M==0?N:gcd(M,N%M);
}
int main(){
int n;
cin>>n;
cin.ignore();
while(n--){
string s;
cin>>s;
long long a=0,b=0; //分子、分母
if(s[2]=='('){ //形如0.(4)、0.(452)的小数
for(int i=1;i<=s.size()-1-2-1;i++){
a=a*10+s[i+2]-'0';
b=b*10+9;
}
long long p=gcd(a,b);
a=a/p;b=b/p;
cout<<a<<"/"<<b<<endl;
}
else if(s[2]!='('&&s[s.size()-1]!=')')//形如 0.5、0.76 的小数
{
b=1;
for(int i=2;i<s.size();i++)
a=a*10+s[i]-'0';
for(int i=2;i<s.size();i++)
b=b*10;
long long p=gcd(a,b);
a/=p;b/=p;
cout<<a<<"/"<<b<<endl;
}
else if(s[s.size()-1]==')') //形如 0.0105(717)、0.32(....) 的小数
{
int pos; // '('出现的位置
for(int i=2;i<s.size()-1;i++)
if(s[i]=='(')
pos=i;
string c=""; //录入小数部分除括号外的所有数
for(int i=2;i<s.size()-1;i++)
if(s[i]!='(')
c+=s[i];
long long a1=0,a2=0;
for(int i=0;i<c.size();i++)
a1=a1*10+c[i]-'0';
for(int i=2;i<pos;i++)
a2=a2*10+s[i]-'0';
a=a1-a2; //分子
for(int i=1;i<=s.size()-1-pos-1;i++)
b=b*10+9;
for(int i=2;i<pos;i++)
b=b*10; //分母
long long p=gcd(a,b);
a/=p;b/=p;
cout<<a<<"/"<<b<<endl;
}
}
return 0;
}