c - 将一个数分解为素数的乘积并打印为 18=2*3^2
问题描述
我必须制作一个程序,将数字分解为素数并将其打印为 18=2*3^2
#include <stdio.h>
void decompose(int n);
unsigned checkprime(int i);
int main() {
printf("100=");
decompose(100);
printf("1\n");
return 0;
}
void decompose(int n) {
int i;
for (i=2; n>1; ++i) {
if (checkprime(i) == 1 && n%i == 0) {
n /= i;
printf("%d*", i);
i=1;
}
}
}
unsigned checkprime(int i) {
if (i==1)
return 0;
for (int j=2; j<=i/2; j++) {
if (i%j == 0)
return 0;
}
return 1;
}
我想不出任何方法以正确的方式打印它
解决方案
我们,初学者,应该互相帮助。:)
这个给你。
#include <stdio.h>
void decompose( unsigned int n )
{
const unsigned int FIRST_PRIME = 2;
printf( "%u = ", n );
if ( n < FIRST_PRIME )
{
printf( "%u\n", n );
}
unsigned int m = FIRST_PRIME;
while ( n > 1 )
{
unsigned int i = 0;
while ( n % m == 0 )
{
++i;
n /= m;
}
if ( i != 0 )
{
printf( "%u", m );
if ( i != 1 )
{
printf( "^%u", i );
}
if ( n != 1 ) putchar( '*' );
}
m = m == FIRST_PRIME ? 3 : m + 2;
}
}
int main(void)
{
while ( 1 )
{
printf( "Enter a non-negative number (0 - exit): " );
unsigned int n;
if ( scanf( "%u", &n ) != 1 || n == 0 ) break;
putchar( '\n' );
decompose( n );
putchar( '\n' );
}
return 0;
}
程序输出可能如下所示
Enter a non-negative number (0 - exit): 1
1 = 1
Enter a non-negative number (0 - exit): 2
2 = 2
Enter a non-negative number (0 - exit): 3
3 = 3
Enter a non-negative number (0 - exit): 4
4 = 2^2
Enter a non-negative number (0 - exit): 5
5 = 5
Enter a non-negative number (0 - exit): 6
6 = 2*3
Enter a non-negative number (0 - exit): 7
7 = 7
Enter a non-negative number (0 - exit): 8
8 = 2^3
Enter a non-negative number (0 - exit): 9
9 = 3^2
Enter a non-negative number (0 - exit): 10
10 = 2*5
Enter a non-negative number (0 - exit): 11
11 = 11
Enter a non-negative number (0 - exit): 12
12 = 2^2*3
Enter a non-negative number (0 - exit): 13
13 = 13
Enter a non-negative number (0 - exit): 14
14 = 2*7
Enter a non-negative number (0 - exit): 15
15 = 3*5
Enter a non-negative number (0 - exit): 16
16 = 2^4
Enter a non-negative number (0 - exit): 17
17 = 17
Enter a non-negative number (0 - exit): 18
18 = 2*3^2
Enter a non-negative number (0 - exit): 19
19 = 19
Enter a non-negative number (0 - exit): 20
20 = 2^2*5
Enter a non-negative number (0 - exit): 0
至于您的代码,例如,即使该功能checkprime
无效。它至少为数字 1 和 4 返回 1,但这些数字不是素数。:)
unsigned checkprime (int i){
for (int j=2;j<i/2;j++) {
if(i%j==0)
return 0;
}
return 1;
}
推荐阅读
- mysql - Web Service 无法连接到 Amazon Web Services 托管的 mySql
- javascript - 如何获取当前地图坐标?
- php - WooCommerce 产品 - 数量变化时显示价格
- python - ValueError:无法组装日期时间:时间数据 1 与格式“%Y%m%d”不匹配(匹配)
- java - 如何在java中读取超过100000行的excel文件?
- spring - ManyToMany 强制唯一索引
- java - Activity A 中的方法在 Activity B 中调用,而 Activity A 完成
- python - os.getcwd() 的 python unittest 值在运行单个测试与整体运行 pytest 时发生变化
- laravel - 在编辑器中打开图像时出现跨源问题
- python - Pillow python:提高脚本性能