NEUOJ 1343 Eat walnuts (容斥原理 + 逆元 + 唯一分解定理)

经典问题,求[1, n]中与m互素的数的和与平方的和
#include <iostream>
#include <vector>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <string>
#include <map>
#include <queue>

using namespace std;
typedef long long ll;
vector<int> primes, factors;
const int maxn = 10000;
const int mod = 1000000007;
ll n, m;
bool vis[maxn + 5];

void init() {
    for(int i = 2; i <= maxn; ++i) {
        for(int j = i * i; j <= maxn; j += i) {
            vis[j] = true;
        }
    }
    for(int i = 2; i <= maxn; ++i)
        if(!vis[i])  {
            primes.push_back(i);
            //printf("prime = %d\n", i);
        }
}

void get_factors(ll m) {
    factors.clear();
    for(int i = 0; i < primes.size(); ++i) {
        int p = primes[i];
        if(p > m) break;
        if(m % p == 0) {
        
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用以下的C语言代码来求解: #include <stdio.h> int main() { int num_peanuts, num_walnuts; printf("请输入小松鼠手中的花生数量:"); scanf("%d", &num_peanuts); num_walnuts = (num_peanuts / 9) * 2; printf("小松鼠最多能换得 %d 颗核桃\n", num_walnuts); return 0; } 首先,程序会提示用户输入小松鼠手中的花生数量,然后使用scanf函数将用户输入的值存储到num_peanuts变量中。 接下来,程序计算最多能换得多少颗核桃:每9颗花生可以换回2颗核桃,因此我们将num_peanuts除以9,然后乘以2即可得到num_walnuts的值。最后,程序使用printf函数将计算结果输出给用户。 ### 回答2: 小松鼠和小熊交换的比例为每9颗花生换回2颗核桃。要算出小松鼠最多能够换得多少核桃,需要先知道小松鼠有多少个9颗花生的组合。 假设小松鼠有x个9颗花生的组合,那么可以换回的核桃数量就是:2 * x。即每个9颗花生的组合都能换回2颗核桃。 要算出小松鼠最多能够换得多少核桃,就需要知道小松鼠有多少个完整的9颗花生的组合。 假设小松鼠有y个完整的9颗花生的组合,那么可以换回的核桃数量就是:2 * y。即完整的9颗花生的组合可以换回2 * y颗核桃。 此外,小松鼠还有z颗不足9颗花生的花生。根据题目描述,每9颗花生换回2颗核桃,所以小松鼠无法换回整数个核桃。因此,不足9颗花生的花生不能兑换成核桃。 所以,小松鼠最多能够换得的核桃数量是:2 * y。 编程实现这个问题可以使用C语言。下面是一个简单的C语言程序示例: ```c #include <stdio.h> int main() { int peanuts, exchangeRate, walnut, completeSets, maxWalnut; printf("请输入小松鼠有多少个花生:"); scanf("%d", &peanuts); exchangeRate = 9; // 9颗花生换回2颗核桃 completeSets = peanuts / exchangeRate; // 计算完整的9颗花生的组合个数 maxWalnut = 2 * completeSets; // 计算最多能换得的核桃数量 printf("小松鼠最多能换得的核桃数量是:%d\n", maxWalnut); return 0; } ``` 运行程序后,输入小松鼠的花生数量,即可得到最多能换得的核桃数量。 ### 回答3: 小松鼠最多能换得多少核桃取决于它拥有的花生数量。根据题目给出的换算比例:每9颗花生换回2颗核桃,可以推算出一颗花生等于0.2222颗核桃(2/9 ≈ 0.2222)。 假设小松鼠拥有n颗花生,将其与换算比例相乘(n * 0.2222)可以得到小松鼠最多能换回的核桃数量。 编程实现这个计算过程的C代码如下: ```c #include <stdio.h> int main() { int peanuts; // 花生的数量 float walnuts; // 核桃的数量(浮点数) printf("请输入小松鼠拥有的花生数量:"); scanf("%d", &peanuts); walnuts = peanuts * 0.2222; // 计算核桃数量 printf("小松鼠最多能换回 %.2f 颗核桃。\n", walnuts); // 保留两位小数 return 0; } ``` 在该代码中,通过使用`scanf`函数获取用户输入的花生数量,并将其与换算比例进行乘法运算来计算核桃的数量。最后,使用`printf`函数将结果输出到屏幕上。 注意:由于题目中没有提到核桃的数量是整数还是浮点数,这里假设结果可以是浮点数,并展示两位小数。如果结果需要是整数,则可以使用整数类型进行计算,并使用`printf`函数的`%d`格式符进行输出。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值