【c语言】统计一个整数所包含的素因子并输出

#include<stdio.h>
#include<math.h>
int prime(int n){
    int i;
    if(n<2){
        return 0;
    }
    for(i=2;i<=sqrt(n);i++){
        if(n%i==0){
            return 0;
        }
    }
    if(i>=sqrt(n)){
        printf("素数:%d\n",n);
        return 1;
    }
    
}

void main(){
    int i,n,count=0;
    while(1){
        printf("请输入一个整数:");
        scanf("%d",&n);
        
        for(i=0;i<=n;i++){
            count+=prime(i);
        }
        printf("整数%d有%d个素数因子\n",n,count);
    }
}

备注:    for(i=2;i<=sqrt(n);i++){
        if(n%i==0){
            return 0;
        }
    }

这段代码中,判断是不是素数不能用break,必须用return 0,不然后面的count会是一个很奇怪的大数字!不要问我是怎么知道的,血的教训!

时间: 2024-11-03 22:24:37

【c语言】统计一个整数所包含的素因子并输出的相关文章

用c语言统计一个字符串中有多少个数字字符

用c语言统计一个字符串中有多少个数字字符. #include<stdio.h>int main(){    char ch;     int count=0;    while((ch=getchar())!='\n')     {        if(ch>'0'&&ch<'9')              count++;     }     printf("%d\n",count);     return 0; }

C语言取一个整数a从右端开始的4~7位的代码

工作过程中中,将内容过程中常用的内容备份一次,如下的资料是关于C语言取一个整数a从右端开始的4-7位的内容,应该能对小伙伴有所用. main(){unsigned a,b,c,d;scanf("%o",&a);b=a>>4;c=~(~0<<4);d=b&c;printf("%on%on",a,d);} 原文地址:https://blog.51cto.com/14137088/2394105

统计一个整数二进制中1的个数

输入一个非负整数num,对于每一个i,0<=i<=num,计算i的二进制表示中,有几个'1',例如输入num=5,输出0,1,1,2,1,2. #include <iostream> using namespace std; // 解法1 int countOne(int num) {     int count = 0;     while ( num )     {         // 当最后一位为1时,则加1         if( num & 1 ){      

C语言统计一个字符串中单词的个数

假定每一个单词用空格隔开. 样例: 输入:how are you! 输出:3 两种方法: 一: #include <stdio.h> #include <string.h> #define SIZE 20 int main() { char str[SIZE]={'\0'}; int count=0; printf("please input the string\n"); gets(str); puts(str); int length = strlen(st

统计一个整数的二进制中1的个数

方法一: 比较暴力的方法(通过将二进制右移获得): int _Count(int x) { int cnt = 0; while(x) { cnt += x&1; x >>= 1; } return cnt; } 方法二: 通过这个数与比他小1的数相与得到:(很神奇的一个方法,手动写几个例子就可以看出来了,不过要自己想的话,还是比较费力的) int _Count(int x) { int cnt = 0; while(x) { x &= (x-1); cnt++; } retu

统计一个整数中(0-9)出现的频率,最大支持1000位整数

#include <iostream> #include <string.h> #include <stdio.h> using namespace std; int main() { char ch[1001]; cin >> ch; //memset(ch, 77, sizeof(ch)); //sprintf(ch, "%d", num); //cout << ch << endl; int i = 0; i

输入一个整数,将各位数字反转后输出

1 #include <stdio.h> 2 #include <stdlib.h> 3 4 int inversion(unsigned int num) 5 { 6 int ret=0; //定义返回值 7 int remainder; //定义一个余数 8 9 while(num) //当num除10不为零时,循环 10 { 11 remainder = num % 10; //取余数 12 num = num / 10; 13 ret = ret*10 + remainde

一个整数对应二进制中1的个数

#include <stdio.h> #include <stdlib.h> /* 4.统计一个整数对应的二进制数的1的个数. 输入一个整数(可正可负), 输出该整数的二进制包含1的个数, “ctl+ z” 结束. */ int main(){ int number; while (scanf("%d", &number) != EOF){ int num[100] = {0}; int length = 0; if (number < 0) nu

一个整数的二进制表示中有多少个1

题目: 一个整数存储在内存中,输出它的二进制表示中1的个数 思路: 要判断这个整数的二进制表示中1的个数,联想到这是[位运算]的题目. 最先想到巧妙利用[1]这个数,[1]只有最右一位是1,其他位均为0: 所以,接下来应该想到,用“1”和这个整数做[与运算],首先可以判断最右边一位是不是1,以此类推,该整数每右移一位,和1做与运算,直到该整数变为0.至此,问题思路已有,但是考虑非正常数字,比如[负数],该方法就不适用,因为负数二进制需要保持最高位一直为1,最后会陷入死循环(OXffffffff)