1175. 质数排列

质数数阶乘乘以非质数阶乘

计算的过程中容易越界,可以考虑用long long存,返回时强制转换

class Solution {
public:
    const int MOD = 1e9+7; 
    int numPrimeArrangements(int n) {
        int primes[] = {2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101};
        int p = 0;
        while(primes[p] <= n) p++;
        int t = n - p;
        long long res = t;
        for(int i = 1; i < t; i++){
                res = res * i % MOD;
        } 
        for(int i = 1; i <= p; i++){
               res = res * i % MOD; 
        }
        return int(res);
    }
};
### 回答1: ```c #include <stdio.h> int main() { int i, j, is_prime; // 从2到100枚举所有数 for (i = 2; i <= 100; i++) { is_prime = 1; // 假设i是素数 // 判断i是否能被2到i-1之间的数整除 for (j = 2; j < i; j++) { if (i % j == 0) { is_prime = 0; // i不是素数 break; } } // 如果i是素数,输出它 if (is_prime == 1) { printf("%d ", i); } } return 0; } ``` 输出结果为: ``` 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 ``` ### 回答2: 要用C语言编写程序来编译1到100的素数排列,可以按照以下步骤进行编程: 1. 定义一个函数`isPrime`来判断一个数是否为素数。在这个函数中,使用循环从2开始逐个尝试除数,若存在整除结果为0的情况,即被整除,则返回0,表示不是素数;若循环结束都没有被整除的情况,说明是素数,返回1。 2. 在`main`函数中,定义一个整型数组`primes[100]`,用于存储素数结果。 3. 使用嵌套循环,外层循环变量`i`从1到100,内层循环使用`isPrime`函数来判断当前数是否为素数。如果是素数,则将其存储在`primes`数组中。 4. 循环结束后,打印出`primes`数组中存储的素数。 以下是一个示例代码: ```c #include <stdio.h> int isPrime(int num) { if (num <= 1) { return 0; } for (int i = 2; i <= num / 2; i++) { if (num % i == 0) { return 0; } } return 1; } int main() { int primes[100]; int count = 0; for (int i = 1; i <= 100; i++) { if (isPrime(i)) { primes[count] = i; count++; } } printf("1到100的素数排列为:\n"); for (int i = 0; i < count; i++) { printf("%d ", primes[i]); } return 0; } ``` 以上程序中的`isPrime`函数用于判断是否为素数,将素数存储在`primes`数组中,然后使用循环打印`primes`数组中的素数结果。运行该程序可以输出结果为:`1到100的素数排列为:2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97`。 ### 回答3: 要编写一个C语言程序来输出1到100之间的素数,可以使用以下算法: 1. 创建一个函数isPrime(),用于判断一个数是否为素数。该函数接受一个整数作为参数,并返回一个布尔值(1代表素数,0代表非素数)。在该函数中,使用一个循环遍历从2到该数的平方根的所有数字。如果该数能够被任意一个遍历到的数字整除,则该数不是素数,返回0。否则,返回1。 2. 在主程序中,创建一个循环,从1遍历到100。对于每个数字,调用isPrime()函数进行判断。如果返回值为1(素数),则将其输出。 下面是完整的C语言程序示例: ```c #include <stdio.h> #include <math.h> int isPrime(int num) { if (num <= 1) { return 0; } for (int i = 2; i <= sqrt(num); i++) { if (num % i == 0) { return 0; } } return 1; } int main() { printf("1到100的素数为:\n"); for (int i = 1; i <= 100; i++) { if (isPrime(i)) { printf("%d ", i); } } return 0; } ``` 该程序会输出1到100之间的所有素数。结果为:2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值