C13-5.11质数&公约数
原题链接:38471.note12025-05-11 19:01:24
发布于:江苏
一、质数的判断
问题:如何判断一个数字是不是质数?
质数定义:只有1和它本身2个因数的数,最小的质数(素数)是2。
方法1:统计因数个数
我们可以从1开始统计枚举到n, 找到n有多少个约数, 如果约数的个数是2, 那么就是质数, 否则不是。
#include<iostream>
using namespace std;
int main(){
int n, sum = 0;
cin >> n;
for(int i = 1; i<= n; i++)
{
if(n % i == 0)
{
sum++;
}
}
if(sum == 2) cout << "yes";
else cout << "no";
return 0;
}
二、最大公约数
1.约数
如果a%b == 0, 那么b是a的约数, 比如 10%2 == 0, 那么2是10的约数, 也叫因数,或者因子, 当然, 10的约数还有1、5、10;
2.公约数
9的约数有: 1 3 9
15的约数有: 1 3 5 15
那么9和15的公共约数有 1和3
3.最大公约数
最大公约数 就是所有公约数中最大的数字。比如上面的9和15的最大公约数为 3。
程序实现:
可以从大往小遍历找到第一个能够同时整数n和m的约数, 那么就是最大公约数。
#include<iostream>
using namespace std;
int main(){
int n, m;
cin >> n >>m;
for (int i=n; i>=1; i--) {
if (n%i == 0 && m%i==0){
cout << i;
break;
}
}
return 0;
}
三、糖果
注意统计的是不能够领取到糖果的数量。
#include<iostream>
using namespace std;
int main()
{
int ans = 0;
int s, n, t;
cin >> s >> n;
for (int i=1; i<=n; i++){
cin >> t;
if (s < t){ //不够
ans++;
}
else{
s -= t;
}
}
cout << ans;
return 0;
}
作业提示
T11
循环从d天开始, 往后枚举d+k天,如果是周六周日那么ans += 800, 其他时间ans += 100
需要找到周末的判断方式。6, 7, 13, 14 ... 这些天数都是周末
当然, 这题也可以用找周期规律的方式来通过
for(int i=d; i<d+k; i++){
if (周末) ans += 800;
else ans += 1000;
}
cout << ans;
T12
假设总的时间是sum秒,那么转换成 h:m:s输出的方式为:
int sum = 45600;
int a = sum/3600;
int b = sum%3600/60;
int c = sum%3600%60;
printf("%02d:%02d:%02d", a, b, c);
这里空空如也
有帮助,赞一个