-
李老师的幸运数字
题目描述
李老师的lucky number 是3,5和7,他爱屋及乌,还把所有质因数只有3,5,7的数字认定为lucky number,比如9, 15, 21, 25等等。请聪明的你帮忙算一算小于等于x的lucky number有多少个?
输入数据
一个正整数x,3=<x<=1000000000000
输出数据
小于等于x的lucky number的个数。
样例输入
49
样例输出
11
解答
#include <iostream>
int main() {
long long num;
scanf("%lld",&num);
int cnt=0;
long long i=1,j=1,k=1;
for( i=1;i<=num;i=i*7)
{
for( j=1;i*j<=num;j=j*5)
{
for( k=1;i*j*k<=num;k=k*3)
{
cnt++;
}
}
}
printf("%lld\n",cnt-1);
return 0;
}
我的思考
想着得到一个数,除以5直到除不尽,再用余数除以3,直到除不尽,再用余数除以7直到除不尽、、、runtimeerror了。。。是不是用乘法比除法好?
-
优美的立方质数
题目描述
如果一个质数能被表示为三个不同的质数的和的形式,那么我们称它为立方质数。现在给你一个数n,判断它是不是立方质数。
输入数据
正整数n,n<=1000
输出数据
Yes或者No
样例输入
19
样例输出
Yes
解答
#include <iostream>
#include <cmath>
using namespace std;
int isPrime(int num) {
if (num <= 1) {
return 0;
}
for (int i = 2; i * i <= num; i++) {
if (num % i == 0) {
return 0;
}
}
return 1;
}
int main()
{
int num;
cin >> num;
if (isPrime(num) == 0)
{
cout << "No";
return 0;
}
for (int a = 2; a < num; a++)
{
if (isPrime(a) == 0) //不是素数 直接跳过当前循环
continue;
for (int b = 3; b < num; b++)
{
if (isPrime(b) == 0)
continue;
int c = num - a - b;
if (isPrime(c) && c != a && b != a && b != c)
{
cout << "Yes";
return 0;
}
}
}
cout << "No";
return 0;
}
我的思考
这题没有思路。。。看了答案觉得哦好简单、、复制别人的代码中好像判断素数的程序错了,错误程序如下:
int isPrime(int n)//判断素数
{
if (n < 2)
return 0;
if (n == 2)
return 1;
for (int i = 2; i < sqrt(n) + 1; i += 2)
if (n % i == 0)
return 0;
return 1;
}
好像是变化量错了,不应该是i+=2,应该是i+=1。