思路,从最大的质因数找起
#include <stdio.h>
int isp(int n)
{
if (n < 2) return 0;
for (int i = 2; i < n; i++)
if (n % i == 0) return 0;
return 1;
}
int main()
{
int n;
scanf("%d",&n);
for (int i = n - 1; i >=1; i--)
{
if (n % i == 0 && isp(i)) { printf("%d", i); return 0; }
}
return 0;
}
也可以这么写
#include <stdio.h>
int main()
{
int n, i, j, maxPrime = 0;
printf("请输入一个正整数n:");
scanf("%d", &n);
for(i = 2; i <= n; i++){
if(n % i == 0){
maxPrime = i; // 先记录当前的i,可能是最大的质因数
while(n % i == 0){
n /= i;
}
}
}
if(maxPrime != 0){
printf("最大的质因数是:%d\n", maxPrime);
}
else{
printf("%d没有质因数\n", n);
}
return 0;
}
用for循环遍历,检查循环变量是否为质数,同时是否是p的因子。如果是,则用p除以循环变量就是另一个因子,判断它是否为质数。找到第一个就行了
#include <stdio.h>
int isprime(int n)
{
for(int i=2;i*i<=n;i++)
if(n%i==0)
return 0;
return 1;
}
int main()
{
int n;
scanf("%d",&n);
for(int i=2;i*i<=n;i++)
{
if(n%i==0 && isprime(i))
{
if(isprime(n/i))
{
printf("%d",n/i);
break;
}
}
}
}
#include <iostream>
using namespace std;
struct POINT {
int a;
int b;
};
void AssignPoint(POINT* p_pstPoint) {
p_pstPoint->a = 1;
p_pstPoint->b = 2;
}
int main() {
POINT stPoint;
AssignPoint(&stPoint);
cout << stPoint.a << " " << stPoint.b << endl;
return 0;
}
#include <iostream>
using namespace std;
struct POINT {
int a;
int b;
};
void AssignPoint(POINT** p_ppstPoint) {
if((*p_ppstPoint) == nullptr) {
(*p_ppstPoint) = (POINT*)malloc(sizeof(POINT));
}
(*p_ppstPoint)->a = 1;
(*p_ppstPoint)->b = 2;
}
int main() {
POINT* pstPoint = nullptr;
pstPoint = (POINT*)malloc(sizeof(POINT));
AssignPoint(&pstPoint);
cout << pstPoint->a << " " << pstPoint->b << endl;
return 0;
}
分析一下两种实现方式的原理和区别个人理解仅供参考